Fix volume_create()/snapshot_create() DB methods

volume_create() and snapshot_create() DB API methods create
entities and return information about them by calling
_volume_get() and snapshot_get() methods. There is no need
to create a new transaction to call the corresponding 'getter'.

Unfortunately, fixing this breaks two existing tests, which rely
on the current behaviour of these DB API methods: both volume_create()
and snapshot_create() raise exceptions, nevertheless new entities are
created.

Blueprint: db-session-cleanup

Change-Id: Idecac70893ec280c149f9227f86a6959d70c15fe
Call get_session() only when necessary

A Session instance should be retrieved only when it's
really needed, e. g. to make a few DB queries inside a
single transaction or to pass the session to a private
DB API method, etc. At the same time, many queries are
simple and can be expressed by the means  of auxiliary
model_query() function.

Blueprint: db-session-cleanup

Change-Id: I2ddc0cda42a84fe600c04f4624db9c2933799bfc
Merge "Fix volume_create()/snapshot_create() DB methods"
Merge "Call get_session() only when necessary"