Bring more sanity to error handling by using an ErrorSet class, similar
in structure to the Bundle, to hold validation error messages.

The validation mechanism has been simplified and the statefulness
removed from the BundleFieldValidator, which now has internal methods
to generate an ErrorSet from a Bundle, and then only throws an exception
if the resulting error set is not empty.
Fix case where id generation failed due to bad data.

Validation is now done in three parts:
 - check data
 - generate IDs
 - check integrity for create or uniqueness for update

Also tidy up some of the package structure.
General cleanup and commenting