rbd: return image size when asked

Implement get_size(), and use it for the second part of the return
value of get().

Convert the old-style functional tests into tests using the store test
base class. These test the store api directly, and are more up to date
than the old functional tests that went through the api. The store tests
base class already includes tests for get() and get_size().

Fixes bug 1180565

Change-Id: I85ca0a0ab3155d1a25607ba9dc210be5719bf85c
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
rbd: remove extra str() conversions and test with unicode

librbd doesn't handle unicode, so strings passed to it must be plain
ascii. Originally the rbd store did this before each call, but since
3aea9320d20d0291c5b4b027a585370d8e658a95 it only needed to convert to
ascii in StoreLocation and add(). Remove the extraneous calls to
str(), and add a test that uses a unicode image_id and uri to make
sure unicode isn't passed to librbd anywhere.

Change-Id: Ib7656126e044775f516fa6665e28f6d474820665
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
Respond with 412 after upload if image was deleted.

When updating the image after upload, we should return an
HTTPPreconditionFailed instead of a 500 error if the image cannot
be found.

This will also provide more information to nova when this occurs
during snapshotting.

Fixes bug 1176174

Change-Id: I270ee129470323dae3919ed0a8c335eae7c24061
Merge "Respond with 412 after upload if image was deleted."
Merge "rbd: return image size when asked"
Merge "rbd: remove extra str() conversions and test with unicode"