Lossless numeric indexing

Previously numeric values where coerved into double before put in index.
This was problematic for some big long values, which could have many
long values convert to the same double value, allowing for invalid
query results (false positives).

This commit solves this by identifying long values that doesn't convert to
a long without changing value, and puts those into a "long" field in the
lucene document, encoded as a long as opposed to the normal "numeric"
double encoding.

This change requires a rebuild of indexes with one or more of such long
values. TODO talk more about the migration.
Pulled out batch inserter index rebuilding into IndexRebuilder
Lucene schema index provider migrator for lossy->lossless numeric indexes

Only the affected indexes, and only affected documents actually, are updated
to the new long<-->double lossless representation.

In order to enable this kind of migration the store migration framework
had to be evolved quite a bit. Therefore StoreUpgrader is turned into the
controller of the whole migration process where participants can register
and are later on asked to determine whether or not migration for that
participant is required and if so asked to migrate. Participants can also
declare dependencies that other participants can satisfy.

Although whereas the dependency satisfication and resolution is in place,
that information is not used to reorder the participants, it's fixed to the
order they were added. That can be added later when we see fit.