Move validation errors into a pkg

This is a precursor to fixing my other PR about error lists - That one is on hold until this or something like it goes in.

This makes ErrorList a public type, but does not implement the error interface on it (because I think we want an empty list to not be an error).  ErrorList.ToError() produces an error or nil if the list is empty.  I put it under api/errors, because that is what it is used for, and the Make* functions are sort of validation-centric.
Reason can be nested.  So I can have an overall reason "failed" which might be composed of "invalid, duplicate, not-found".  I would recommend for Validation though being consistent in strategy with api.Status though so we have less to worry about later in conversion.   I.e. "reason" is the cause, and is a machine readable string, "message" is the message displayed to users.