stateless ncwms

that chunk of work was starting to get too large and things mostly work, so it's a good time to recap, get some scrutiny, fix things and then continue.

work that was done:
 * remodel TemporalExtent class to be a hash of arrays, each key is a date (stringified) and the array holds moments which are the times of the day
   * all days loaded when ncwms loads
   * times of day are loaded as needed
 * change ui to correspond to those changes
 * modify tests where required

things that don't work:
 * findLayerAsJson is still being called also for ncwms layers, more properties should be taken from the metadata rather than the scanned properties (bounding box etc)
 * next/previous buttons don't work if you move to a day that was not loaded previously - will be fixed
 * make the url which gets the times of the day to have a controller (and also move json parsing logic to be in grails)
So you might wonder why this is here. And this is indeed super ugly, look at the implementation.

There is no way of knowing whether a layer is ncwms or not. In the future commits I will provide something coming from `findLayerAsJson` or something equivalent in which the server will tell JS whether a layer is ncwms or not, so this **will** change. I didn't want to introduce this change in this PR though as it got already quite large.

This is mostly here so I can prove in the PR that things are stateless as promised. i.e. there isn't a `findLayerAsJson` call required for NcWMS layers. This commit can be reverted if you feel uncomfortable with it.