Improve BlockDeviceMapping object cells awareness

This patch makes BlockDeviceMapping object methods that are creating and
updating the database more aware of the cells. There are 2 changes that
are good to distinguish between:

 - create() will _never_ work in the API cell and will raise an
   ObjectActionError.
 - save() and destroy() are now aware in which cell they are being
   called and do not attempt to propagate it upwards

This is currently a no-op change as we don not currently use objects in
any of the code that will run in the top cell. This is in fact
preparation for transiting the API code to using BlockDeviceMapping
objects.

Change-Id: Ic5806c844f2deab734011d68f5da316903000f67

Conflicts:
	nova/tests/objects/test_block_device.py
Make cells rpc bdm_update_or_create_at_top use BDM objects

We were sending SQLAlchemy objects previously, which is bad practice
since they work only with Rabbit rpc backend. Inter-cell RPC calls will
still use dicts.

Change-Id: I28ee5f914914b85be577291edef6c285f055be5a

Conflicts:
	nova/cells/manager.py
	nova/cells/rpcapi.py
	nova/tests/conductor/test_conductor.py
Not count disabled compute node for statistics

No server will be scheduled to disabled compute service, thus we
should not count the corresponding compute node information.

It's arguable if we should count for 'down' service, since service
may be marked down because of communication error. If we do want to
exclude the down service, we need passing the information from caller
because the up/down state is not kepts in database, and it means compute
and cell api changes.

Closes-Bug: #1285259

Change-Id: I5e3e71ef30683c5eb5cc4462f58fa5f29d7c3f4b