Change to how we expose HasOne and HasMany

Now exposing as a List, and the property is writeable (though does not effect the DB).
This just makes it easier to build the structures even if they're not in the DB, for example, if you're creating them to be sent to the server over remoting.

Also, there was some code cleanup in DBMacros, using reification to save a fair few lines of code.