Losless 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
Some store migration refactorings
Lucene migration towards fix for lossy big long -> double conversions