conversion refactoring

This is in preparation for two things:

* allowing struct <-> map[string]interface{} conversion
* extending the auto field copying to allow stuff like .Labels <-> .ObjectMeta.Labels

Also should give nicer error messages.
I have no preference. Changed.