Requests for comment/Improving extension management

General rough notes still.

Problems with extension management:

Pain points for developers

 * Handling dependencies
 * Depending upon another extension is typically manual and hacky with ExtensionFunctions
 * Versioning
 * Versioning is mainly an internal thing, not really exposed anywhere, and not really used by sysadmins. Or is it? As a dev, I typically ignore them unless someone asks me to bump it.
 * Compatibility with core
 * We have REL_ branches, but people usually don't backport every change they make that is compatible
 * wfUseMW is hacky as well

Pain points for sysadmins

 * Just because an extension has a REL1_xx branch doesn't mean it actually is compatible with said version
 * Upgrading tons of extensions at once (during a major version bump) is not super friendly and requires a lot of manual steps

Considerations

 * Security: This system should function in an environment where webservers cannot write executable PHP files
 * Ease of use: Shouldn't require a CLI interface, nearly everything should be doable from the web

Dependencies

 * Specify in the extension.json file what other extensions are required.
 * Processed by the registry at run-time
 * External libraries can be depended upon via composer.json. But not actual extensions.

Versioning

 * I think we should keep this in its current state, generally internal and exposed if the extension maintainer chooses to use it.

Compatibility with core

 * Extensions define what minimum wmf branch (or stable release) of core they support in the extension.json file. We don't auto-create release branches for each extension.
 * When the developer chooses to drop support for a major version of core, they have the option of creating a REL1_xx branch that users can use.
 * `master` can be compatible with whatever the developer wants it to be compatible with, and it's clear to everyone else what it's compatible with
 * Could we run tests automatically with every version of core it claims to be compatible with???

Implementation

 * SpecialPage to enable/disable extensions (via wfLoadExtension stuff/configdb)
 * Downloading/installing circles around tarballs.
 * ExtensionDistributor preps "bundles" which includes a group of extensions you need for the one you enabled, for your mw version.

Example because I'm not explaining my self properly:
 * User wants to install Translate, running mw1.23.
 * Ticks enable.
 * Fetches "Translate-ULS.1.23.tar.gz" from ED.
 * Unzips
 * Boom, magic

ahhhhhh