Avoid indexing nodes twice.

Prior to this change it was possible to get two index entries in the case
when you both added the label and set the property in the same transaction,
but created the node in a previous transaction.
This would violate constraints (silently - making the db inconsistent), and
would cause the same node to be returned multiple times from an index lookup.

This is resolved by gathering a Set of updates to apply to the index, rather than a List.
Removed PropertyData (the old property representation)

The move of property handling to the kernel API isn't fully done. One
aspect of that "incompleteness" is that we've get the old PropertyData
class hierarchy, while using a new very similar Property class hierarchy
in new code in the kernel API. PropertyData had one #getId() method that
Property doesn't, but that wasn't used anywhere.

Also represents tokens (label/prop key/rel type IDs) as ints instead of longs

This commit only changes the in-memory representation, not any store
format. The reason this long-->int switch ended up in the same commit as
the removal of PropertyData is due to hard conflict merging jumbling up
the two separate commits into commits that couldn't have been cleanly
applied separately.

Known store constructs still storing tokens as if they were longs:
 o IndexRule propertyKey
   from the outside it now looks like it's an int, but putting/getting
   to/from the ByteBuffer uses putLong/getLong
 o NodeLabelsField
   even from the outside it looks like longs. This is mostly due to the
   wat we decided to piggy-back on the long[] labels array, where we put
   the node id (which is a long) into that array as the first element.
   Converting this to an int[] externally would incur more array copying
   back and forth between int[]<-->long[] there.
 o HA protocol Master#acquireIndexEntryWriteLock still uses long for
   labelId/propertyKeyId to not change the protocol.
 o There might be more...
More efficient cache representation of node labels