As suggested it mostly comes down to personal preference and what works for the project you are working on at the time. Everyone you speak to you will have different ideas, and each project has it's own design - what works for one may not work for the other. I expect you'll try quite a few different structures and will soon find one that is the most comfortable - but this will still evolve over time.
I've found the Angular Seed structure to be the cleanest, but again that's personal preference (though, it helps that it's designed by the Angular team.)
You might also consider looking at Yeoman for generating project skeletons.
Yeoman is a robust and opinionated set of tools, libraries, and a
workflow that can help developers quickly build beautiful, compelling
It's a great tool for bootstrapping and managing projects (similar to the way Rails does) and will create a directory structure and skeleton files for you to build upon. Brian Ford wrote an excellent post on using Yeoman with Angular.
I also suggest watching the Angular meetup recordings on their YouTube channel. I recently attended a meetup in Mountain View where these questions came up. MiŇ°ko recommended Angular Seed and Yeoman (at least as a good starting point.)
To answer your individual questions:
Any files that are compiled server-side should be kept outside of
your public folder. I would suggest not keeping the likes of master
PSDs, mockups, or any other files that are not meant for public
consumption (either by browser or user) inside public folders.
It is always good to serve static assets (JS, images, CSS) from a
CDN if you expect a high amount of traffic. It's not so important
for lesser visited sites, but still a good idea. I would start by
serving the files locally for initial development. Leave the asset
optimization for when you are nearing your live date. When this
time does come you'll also want to get your caching set up right.
Yeoman, for example, presents a good way of versioning your assets.
This gives you the advantage of long lived caches but allowing you
to push updates of the files to the clients.
If you're index file doesn't require any server-side rendering,
serve it statically. I like to keep my backend decoupled from the
backend as much as possible with Angular apps. It helps maintain
separation of concern; when developing the client files, you don't
need to think about the backend at all (Angular is great for this.)
Really, you just need to play around; try different things out, read blog posts, get ideas from others, ask questions (as you have done here, and on the Angular Google+ community page), watch videos and, if you can, attend meetups - Meetups really are great for this.