Upload form changes

See also brion's post on this.
 * Move upload logics out of UploadForm: This will allow the API and extensions to easily upload files.
 * Multiple customizable upload forms via Special:Upload/ownwork, etc.

Upload class

 * Abstract upload baseclass
 * Subclass UploadFromUpload
 * Subclass UploadFromLink
 * Subclass UploadFromImport (cross wiki import)

Flow
SpecialUpload => new UploadForm => new UploadFromUpload => RepoGroup::singleton->getLocalRepo->findFile->upload

Customizable form
Special:Upload/ownwork will get its data via MediaWiki:Upload-ownwork. Example file:
 * label|filename
 * file|
 * label|author
 * text|author
 * label|license
 * selectbox|licenses
 * label|description
 * textbox|description

Will create a form with a file input box an author input box and a license selector. The label will be fetched from MediaWiki:Upload-ownwork- /langcode. Similarly the license select box will be constructed. Then after upload all this will be transformed using MediaWiki:Upload-ownwork-template which uses to transform this into something nice:

Modify the text below the upload form
Edit MediaWiki:Uploadtext

Other stuff

 * commons:MediaWiki:HotCat.js
 * Information buttons as in commons:Special:Upload