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.
Is `ss` more readable than `s`?  Would recommend using the simpler - hard to read constructs like `len(*ss)`, seems like `len(*s)` would be simpler.