3.0 datasource abstraction

These are the initial changes for extracting reusable code from the Database and ORM namespaces. A few highlights of what has changed:

* New `Datasource` namespace
* ConnectionManager moved to Datasource and does not instantiate drivers anymore, it can now generically instantiate any class and be used as a connection.
* Extracted RepositoryInterface and EntityInterface
* Created EntityTrait, I figured this code would be useful in any kind of datasource

The next steps will be to create a simple datasource by using the extracted code. I will take care of the documentation changes when this is merged