Add "friendly_name" to all Razor::Data classes

This adds a method to all Razor::Data classes to return a friendly name for
the type.  This can be used to talk about the object in, for example, error
messages elsewhere.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Improve reporting of validation errors

This extends the validation framework to pass the context of the current
attribute through the system, and report using it.  This means that we will
see messages like "broker.name must refer to an ..." rather than "name must
refer to an ..." emitted.

That should help much more effectively understand where the problem was
located, rather than guessing at one of the many identically named attributes
it could possibly match.

https://tickets.puppetlabs.com/browse/RAZOR-191

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Implement a 'size' validation check for attributes

This implement a check to validate the size of an attribute; it only makes
sense for string, object/map, and array types.  It uses a range to verify the
minimum and maximum size of the object in characters, or contained entities.

This, in turn, supports verification that inappropriate length entities are
not passed in our data.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Apply a size check to tag names, rejecting zero-length names

This applies the size validation check to tag names, to ensure that they are a
legal length matching our definition in the database.  That is, between one
and infinity characters long.

https://tickets.puppetlabs.com/browse/RAZOR-137
Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Apply size checks to all other commands, where relevant

This commit whips through all the other commands and applies a size check to
string arguments -- matching our database constraints.  This kind of shows how
incoherent those constraints are, varying wildly between infinite and
constrained, but they are our current constraints.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Add user help to all commands

This adds user-facing help to all commands, based on the existing
documentation.  This will be automatically exposed to the client through the
new command metadata API, and will permit this information to be shared with
the client automatically -- as well as future updates to help about the
commands as we improve the software.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>