librbd: expose ContextWQ as pure interface for external implementations
Make ContextWQ a pure interface in the public API to allow external modules
to provide custom ContextWQ implementations.
- Move ContextWQ to public header as pure interface (no Boost.ASIO dependencies)
- Extract ASIO implementation into separate AsioContextWQ class
- Add to set ContextWQ at open time
- rbd_open_with_context_wq()
- rbd_open_read_only_with_context_wq()
- Add rbd_get_ceph_context() C API to retrieve CephContext from RBD image
- Add rbd_context_complete() C API to complete contexts without full Context
definition
- Change m_context_wq from unique_ptr to shared_ptr for external ownership
- Install public headers via CMake and include in librbd-devel package
Signed-off-by: Alexander Indenbaum <aindenba@redhat.com>