Update/remove Controller::$uses & Controller::loadModel()

Remove Controller::$uses. It doesn't serve much purpose now other than
to waste resources by eagerly loading models. If people need to load
multiple models in a single controller they can use repository() to
fetch them. This new method will respect any set properties making
testing simple.

Update and remove tests that are no longer relevant.
Lazy load the repository named after modelClass.

This means we don't have to require people to load the primary model, as
we can infer what it is based on the modelClass.
Extract a trait that provides repository()

This trait will be re-used in the Shell class which offers similar
features to Controller.
Update Shell to use repository trait.

Replace some duplicate code with the RepositoryAwareTrait. This
lets Shells and Controllers share the same behavior around handling
repositories which is nice.
Don't overwrite properties when they are set.

If modelClass or modelKey is set the framework should not overwrite
them.
Remove reverse merged properties.

CakePHP no longer needs this feature so it makes sense to remove it.
modelKey is only used by scaffold.

Since it only has one user confine it to there.
Make RepositoryAwareTrait not coupled to the ORM.

Add a default type (the ORM loader) and allow userland repository types.
The plan is to allow users + plugins to define new repository types that
can be fetched from their own factory methods. Register the
TableRegistry so things 'just work'
Fix lint error.
Correct errors in file headers.
Fix a bunch of various coding standards errors.
Fix failing tests.
Fix lint error.
Merge pull request #2443 from cakephp/3.0-controller-repository

3.0 controller repository method.