Activate Grunt rev task

- Prepends js and css file names with md5 of
contents so web browsers don't load cached files
when the contents has changed.
Add no-cache headers on Ajax GET calls.

- Fixes IE 9 getting 304:s form the server when requesting labels etc.
Remove duplicate properties during store migration from 2.1 to 2.2

Signed-off-by: Jakub Wieczorek <jakub@jakub.cc>
More complicated test data for the duplicate property removal on store migration
Further progress on simplifying the duplicate property fix-up in 2.1-2.2 migration
Addressing minor nits
Add a test for the NodeStore#scanRecords() method
Fixes for failing tests caused by the property deduplication during migration.
Add some sanity checking assertions to the property deduplication.
UI/UX fixes

* Cypher frame height fix.
* Give REST frame correct CSS classes for errors.
* Make more sense of REST error messages.
* Show long error messages in frame body.
Fix graph rendering on IE 9

* IE 9 has something called window.performance but not
the method now on that object.
Address a number of low-risk review comments on the property deduplication.
Merge pull request #3477 from chrisvest/2.2-dupprop-migrate

Remove duplicate properties during store migration from 2.1 to 2.2
Make the primitive collections visitors generic over Exception types.
Fix inconsistent counts

Counts were becoming inconsistent when deleting a node and its
relationships in the same transaction. This is fixed by inspecting
the (pre-state) labels and relationships of the node that is being
deleted when building the counts from the transaction state.

Counts also became inconsistent during recovery, since commands in
the log did not contain information about the relationship type for
deleted relationships. We need this information in order to be able
to consistently update the counts, since we cannot trust what is in
the store during recovery. This is fixed by adding type information
to removed relationship commands in the log.

Recovery of the counts store also has a problem in that the counts
store did not have a marking to signal that it is inconsistent, since
it was updated in place. To mark the store as inconsistent / incomplete
the file is truncated before writing of the store is started.
Reading of a truncated file will show up as an IOException in
openVerifiedCountsStore(), this is handled in the same way as the
previous internal-consistency-check (which is still in place, and
complements this new additional check) of making sure that the number
of expected data entries written in the header matches the actual
number of data entries in the store.
The truncation is required since we would otherwise not be able to
recognize a partial write of the store where the new number of
records is the same as the old number of records.
Log when recover index samples on startup
Log manual triggering of index sampling
Code cleanup
Log when evicting stale plans
Fix: unused imports