Defer unique constraint verification for better performance.

o Reading from index for before adding each new entry is expensive,
  so delay verification until the end.
o Use IndexReader.terms() to iterate though all index entries in
  sorted order and verify that total number of unique terms matches
  expected number of entries.
o Group together property encoding logic into Enums.
o Store numbers as oridinary fields and make number encoding explicit.
o Use normal TermQuery instead of RangeQuery.