I always buy all my domains with my hosting package when I purchase hosting. I have always found that being the best and easiest way for me to do it as they always do great deal with both hosting and domain. I am currently using BigWetFish.
I use 123-Reg to register all of my domain names. I find them really good & offer a good price also. They have lots of extra that you can buy with domains too, that said, i havent really bought any of the extras, just the domains.
I've used both Godaddy and Namecheap, but I now use Namecheap for all new domains. As for Godaddy, I now have NO active domains on it and am just waiting for the old domains to expire to sell them off. Godaddy has screwed up too many time and I'm done with them.
I buy mine anywhere that I don't have hosting. It's a bad idea to get your domains from the same place you have your site hosting because if their site goes down you want to be able to log into your dashboard and point your DNS to your backup server. You can't do that if the hosting and DNS are on the same service and they go down.
I buy my domains from namecheap and name.com. Whatever one has the best coupons at the time of that I want to register a new domain, they are both great registrars, and the only two that I'll use from now on.
I use ryleejames.com for my hosting and domain needs They are a smaller provider but definitely (for me anyway) one of the most reliable. I've had 95% uptime on all of my sites and when its down or the DB crashes theres always a fresh backup and I always get up and running within a few hours along with realtime support when its needed. I have one or two on godaddy due to buying them from others but will soon transfer them to ryleejames also.