3.0 - Create entities from arrays

As described in #2425 I've tried to implement the code described in that issue. I've not attempted to integrate it into result set processing yet as I wanted to keep this set of changes smaller and easier to review. Somethings to note:

* Request/array data needs to use association aliases as the keys for the request data. I'm not sure this is ideal, but it is a simple approach. I'm happy to change it if there are alternative ideas.
* By default only one level of associations are hydrated. Infinite recursion is a worry I have so I'd rather not enable that by default.
* The `_safe` flag is currently unused, but when the mass assignment feature is complete, this value will be used to disable guarded/protected fields.