Broke the law of Demeter - may she forgive me.

Don't fiddle with objects you don't control. In this case a method
added a value to a map it didn't create; and as we all know, maps
don't always support adding values, do they...
Make template json output useful for imjs.

We were not serialising all constraints, just editable ones. The way
imjs works means this is fairly pointless as it doesn't even use the
template query endpoints (and there is no benefit in doing so anyway).
This change means that imjs can natively consume available templates
listings now.
Fix user error being swallowed as HTTP 500.

addView throws IllegalArgumentException if the views are badly
formatted. This should be caught as user error.
Complain about malformed queries appropriately.
Allow queries to be submitted in compressed form.

This seems totally insane, and indeed it kind of is, but it does mean
we can open up a mechanism for allowing GET requests for otherwise
impossibly long queries.
Added scripts for automating the comparison of enrichment.

These should be cleaned up and used as part of the release procedure.
Added a query xml shortening facility.

InterMine suffers from xml-itis. This badly affects GET requests with
long queries in them. This is another method for dealing with this issue
by allowing access to a minimal query storage service on the server,
which means we can refer to queries by id. At present these queries do
not live beyond the life-time of a session, as they live in memory. They
should be treated as very short-lived entities.
Added the facilities for efficient bi-directional lookup.

At the expense of some extra storage of course. But this should be
more than compensated by avoiding storing duplicate queries.
Moved Query store into the API package. Future-proofing.

This moved the query-storage out of the webservice package and into the
api where it belongs. It also future proofs the system by allowing for
multiple different implementations of the protocol. Currently the only
existing one is an in-memory store, but this can be expanded with a
persistant store in the future. The QueryStore implementation itself has
a set of defined exceptional states, and returns strings as ids rather
than integers, so that alternate implementations can do what they like.
The current implementation has also been made life-cycle aware.