def begin():
    """Explicitly begin and return a new transaction.

        If an existing transaction is in progress and the transaction
        manager not in explicit mode, the previous transaction will be
        aborted.  If an existing transaction is in progress and the
        transaction manager is in explicit mode, an
        `AlreadyInTransaction` exception will be raised..

        The `~ISynchronizer.newTransaction` method of registered synchronizers is called,
        passing the new transaction object.

        Note that when not in explicit mode, transactions may be
        started implicitly without calling `begin`. In that case,
        ``newTransaction`` isn't called because the transaction
        manager doesn't know when to call it.  The transaction is
        likely to have begun long before the transaction manager is
        involved. (Conceivably the `commit` and `abort` methods
        could call `begin`, but they don't.)
        """
