Introduce a Transaction object, now with a TransactionDefinition

To move forward with the Transaction Object, here is an alternative proposal to #571.

This keeps the same basic idea, but now there are two ways to begin a transaction:

- `TransactionManager::beginTransaction()`, which immediately begins a transaction with an optional definition;
- `TransactionManager::createTransaction`, which returns a `TransactionBuilder` that helps building a definition and beginning a new transaction with this definition:

---

    $manager = $connection->getTransactionManager();
    $tx = $manager->createTransaction()                            // TransactionBuilder
        ->withIsolationLevel(Connection::TRANSACTION_SERIALIZABLE) // TransactionBuilder
        ->begin();                                                 // Transaction

I think that this implementation checks all the boxes:
- Clear separation between the Transaction and its Definition
- Once the Transaction is created, its Definition is set and cannot be changed

And needless to say, we're still keeping 100% BC compatibility.

What do you think?
The builder is a good idea, I've actually extracted the `TransactionBuilder` out of the `TransactionDefinition`: the `TransactionDefinition` is still there but is now immutable, and can safely be shared between transactions without carrying the risk to be altered.

Re-reading the whole thing, I've come to realize that the existing `TransactionManager::createTransaction()` should actually be called `beginTransaction()`, so I've renamed it. This method can also now be called directly if we want to begin a transaction with the defaults parameters, without using the builder:

    $transactionManager->beginTransaction();

`TransactionManager::createTransaction()` now returns the `TransactionBuilder`; I've chosen to keep the name `createTransaction()` for now, as it feels more natural to me:

    $transactionManager->createTransaction()                       // TransactionBuilder
        ->withIsolationLevel(Connection::TRANSACTION_SERIALIZABLE) // TransactionBuilder
        ->begin();                                                 // Transaction

@stof What do you think?