Robot name - Iteration 2

I wasn't sure if I need to open a new pull request for the minor change suggested in the first iteration. I made that change, plus a couple extra that I noticed.

Changes in this iteration:

1. Add a second Exception Class, NameInvalidError, that more accurately describes an error raised when the name is invalid.

2. Change the way the new Exception classes are instantiated, using Class.new.

3. Change the method name, assign_name, to generate_name for more clarity.

4. Make use of Object#method to eliminate the need for the if statement in the old assign_name method. This also required setting @generate_name to the :default_name method object if no parameters are passed into the object upon instantiation.
is this really a good name for what this is doing? I don't think it's a default name, so much as a randomly_generated_name or something like that