Refactor admin menu API to allow menu items to have bundled JS

This is a prelude for the work on #399 to add a 'settings' item to the menu. This PR adds a new hook `register_admin_menu_item` which is triggered on startup to build a 'master' list of menu items. This improves on the current `construct_main_menu` mechanism in two ways:

* Menu items can now define their own JS declarations; since the master list is a static list, `./manage.py compress` can pick these up and incorporate them into the compressed/cached JS. This means that the explorer and settings menu JS can be decoupled from core.js, and makes it possible for third-party apps to add JS behaviours to menu items without hacking wagtailadmin.

* It's (probably - I haven't formally measured) a marginal performance boost, since we're not constructing MenuItem objects and reversing URLs on every request.
Yep, it does (just tested it)... the motivation for moving from `construct_admin_menu` (at request time) to `register_admin_menu_item` (at server startup) was to ensure that we have a statically-known list of menu items and their assets, which cannot vary according to the request / template context. This means that it will return the same list of includes when django-compressor evaluates the template as it will for a real request.