Intelligent container

Implementation for #12829

Generates and injects parameters automatically. You can now build full classes like

    $c->query('MyClassName')

without having to register it as a service. The resolved object's instance will be saved by using registerService. If a constructor parameter is not type hinted, the parameter name will be taken. 

Therefore the following two implementations are identical:

    class Class1 { function __construct(MyClassName $class)
    class Class1 { function __construct($MyClassName)

This makes it possible to also inject primitive values such as strings, arrays etc.

In addition if the query could not be resolved, a QueryException is now thrown

Routes can now be returned as an array from routes.php and an appinfo/application.php is optional

@DeepDiver1975 @LukasReschke @MorrisJobke @bantu @PVince81 @nickvergessen @jbtbnl @georgehrke 
It is a common pattern to use the same namespace for the tests. That way you don't have to import all the namespaces that you're testing anyways. While a test namespace makes sense for test utility classes I don't think it's required for the actual unit tests