Extension:CentralNotice/Notes/Banner controller refactoring

Here's a place to keep some rough notes about reorganizing CentralNotice banner controller code.

Goals

 * Improve modularity and separation of concerns in banner controller code.
 * Adapt the banner controller API as needed for new campaign-associated mixins.
 * Improve site performance when banners are shown and when they're not.

Requirements

 * Separate concerns in a way that makes sense for selective loading of components based on campaigns available.
 * Follow typical and best-practice MW patterns, where applicable.
 * Remove any cruft.
 * If possible: move out code that has uses beyond CentralNotice (for example, GeoIP cookie stuff).

Requirements

 * Remain compatible with existing banners. The following methods should be maintained (though they may be deprecated):

Reducing the size of top-loading RL modules

 * Does the fact that RL modules are cached in localStorage somewhat mitigate performance gains from doing this?
 * Why should any CentralNotice code be top-loaded?
 * The sooner the bannerController runs, the less of a page bump there will be when a banner is shown. Also, completely eliminating CentralNotice top-loaded modules would increase the number of round trips across the board.