Robot name - Revision 3

Moved the name generation functionality from `RobotNameRegistry` class into `RobotNameGenerator` class as suggested by @bwthomas . Also cleaned up the exception classes. They are less verbose now.

###### Previous PRs

https://github.com/jmmastey/level_up_exercises/pull/187
https://github.com/jmmastey/level_up_exercises/pull/199

Fwiw, if these are custom error classes only used within a single implementation class, I typically include them at the head of that class file. I know that's directly contradictory to all the things we've said about how to organize code, but that's a typical way to do it. If they're used within a larger module, this approach would be preferable.