Allow user-uploaded extensions; load JME scripts statically

Users can upload their own extensions. Works in basically the same way as for themes.

The location field is used as a unique identifier for an extension, for carrying over between editor servers.

Also:

Add links to upload extensions/themes from the edit page - makes it a bit more obvious than having to click through the profile page.

A couple of non-editable exam view fixes:
    Correctly display theme name
    Don't try to get user's recent questions

Only show extension documentation link if the URL is set

Add Numbas.addExtension shorthand: Numbas.addExtension is a wrapper round Numbas.queueScript. It just takes a short name (should be the same as the extension's location field in the editor) and passes a callback the corresponding Numbas.extensions.XXX object. This way, you don't need to mess about with `extensions/x/x.js` paths, or set up the extension's JME scope.

Move 'base' and 'display' dependencies to editor-extras.

Load JME scripts in <script> tags, not through loadScript
The loading-scripts-on-demand thing for JME scripts was silly, because it adds to page load time, and meant sstatic couldn't do its thing to the script URLs to get round browser caching.
Scripts are now loaded by the page, and numbas.js is now basically the same as the one in the Numbas runtime.

Questions now have a proper ManyToManyField for extensions, instead of it being buried in their json data. This makes it easier to update extension names when they change, and to work out which questions use a particular extension.