Tx manager

The **GraphAware Transaction Manager** allows Neo4j transactions to be monitored and aborted if they misbehave. The Transaction Manager takes over the responsibility from the database for creating Neo4J transaction by providing GraphAware Transactions instead. These wrap the standard Neo4J transaction and add some cool extra *transaction-fu* along the way, such as direct programmatic support for abort: 

    tx.abort()

as well as the ability for one thread to wait for a transaction running on a different thread to complete.

    tx.join()

Client code doesn't need to change except (currently) for how the transaction gets started. 
    
    //before:
    try (Transaction tx = database.beginTx()) { 
       ...
    }
    // after:
    try (Transaction tx = transactionManager.beginTx()) {
       ...
    }

Support for Cypher/HTTP is coming shortly, and also for monitoring and managing transactions in a clustered configuration (i.e. providing visibility from any server of both local and remote transactions)

Comments, thoughts, suggestions for improvements, etc. gratefully received.