Enforce uniqueness constraints on property update

Enforced through online-accessor for in-memory and Lucene indexes.
Added several tests for updating properties in single and multiple transactions.
Introduced specialised constraint violation exceptions, depending on whether conflicts were previously committed.
Restructured in-memory index index implementation into a number of classes in their own package.
Extracted handling of property uniqueness checking into its own class, reusable from different index implementations.