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 
generally speaking we follow the pattern to name the test classes identically to the class under test and change the namespace (maybe not ideal ...) - it would be great if we simply stay consistent.

Applying a different approach to naming the unit test could be topic of it's own. THX