Deprecated the old transaction management APIs.
Made transaction management work even before the first SQL query.

Thanks Florian again.
Implemented atomic_if_autocommit.

It disables transaction management entirely when AUTOCOMMIT is False.
Deprecated TransactionMiddleware and TRANSACTIONS_MANAGED.

Replaced them with per-database options, for proper multi-db support.

Also toned down the recommendation to tie transactions to HTTP requests.
Thanks Jeremy for sharing his experience.
Re-ordered functions by deprecation status.
Updated the documentation for savepoints.

Apparently django.db.transaction used to be an object.
Added an explanation of transactions and grouped low-level APIs.
Added a note about long-running processes.

There isn't much else to say, really.
Added an option to disable the creation of savepoints in atomic.
Added a safety net for developers messing with autocommit.
Updated a test that doesn't make sense with autocommit.
Removed a test that no longer makes any sense.

Since unmanaged == autocommit, there's nothing to commit or roll back.
Used commit_on_success_unless_managed to make ORM operations atomic.
Used commit_on_success_unless_managed in loaddata.
Abused atomic for transaction handling in TestCase.

It isn't necessary to disable set_autocommit since its use is prohibited
inside an atomic block. It's still necessary to disable the legacy
transaction management methods for backwards compatibility, until
they're removed.