snf_django: Add database router for Synnefo apps

Add Django database router to support using Synnefo with multiple
databases. In a gist, if the administrator has added in the DATABASES
setting a database with the "cyclades" or "astakos" alias, and
SynnefoRouter is defined in DATABASE_ROUTERS, then that database will be
used to read/write the respective Cyclades or Astakos models.
snf_django: Add support for multi-db transactions

Add two functions:

* select_db: Return an appropriate database to read/write depending on
  the app ("db"/"im") that makes the request.
* _transaction_func: Common entry point for all Cyclades/Astakos
  transaction functions. This function calls the select_db function to
  choose a database for the transaction and then passes the control to
  the Django transaction functions.
cyclades: Mimic Django transaction module

Provide a transaction module similar to Django's. The implemented
functions are commit(), rollback(), commit_on_success(),
commit_manually(), which should work exactly the same as the Django
counterparts. The added benefit is that the transaction will open always
in the correct database, even in a multi-db scenario.
astakos: Mimic Django transaction module

Provide a transaction module similar to Django's. The implemented
functions are commit(), rollback(), commit_on_success(),
commit_manually(), which should work exactly the same as the Django
counterparts. The added benefit is that the transaction will open always
in the correct database, even in a multi-db scenario.
cyclades: Change the imports for transactions

Do not import the transaction module from django.db. Import it instead
from synnefo.db, where the Cyclades transaction entry points are
located.
astakos: Change the imports for transactions

Do not import the transaction module from django.db. Import it instead
from astakos.im, where the Astakos transaction entry points are located.
cyclades: Add tests for transactions
astakos: Add tests for transactions