User:Daniel Kinzler (WMDE)/MW Refactor

Goal
Refactor MW core to become more modular. Split off some parts into separate libraries. This enables
 * More code re-use
 * Easier maintenance
 * More flexibility to replace bits and pieces with alternative implementations or external services.

Principles
Primary principles: Corollary principles:
 * Application logic shall not depend on global state
 * There shall be no circular dependency between classes
 * Hint against narrow interfaces only. Callers with different needs should not hint against the same interface.
 * Avoid using "kitchen sink" objects that depend on lots of things.
 * Global variables and global service instances must be accessed only in static entry points.
 * Inject all services and settings needed by a class via the constructor.