Fix issue involving cleanup inside block, and update tests

The issue occured when SomeModel.using(:some_shard) was called inside an
Octopus.using block. In this case, clean_connection_proxy was not called
afterwards, because Octopus::Proxy#block was true.

The fix is a bit hacky, but I couldn't find something cleaner. Using
thread-local variables to store shard state in ScopeProxy chains seems
to make everything intrinsically fragile, since unlike with blocks,
there's no good way to guarantee they'll be reset when the caller
assumes they are done with them.

Incidentally this converts specs to the newer syntax.