mon: PaxosService: consider is_recovering() on is_writeable()

A service is never writeable while it's recovering.

Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
mon: PaxosService: is_readable/writeable() depending on is_active()

Instead of depending on individual conditions.

Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
mon: PaxosService: is_writeable() depends on being ready to be written to

Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
mon: PaxosService: add request_proposal() to perform cross-proposals

Instead of allowing services to directly use 'propose_pending()' on
other services, we instead add two new functions:

  - request_proposal() to request 'this' service to propose its
    pending value; and
  - request_proposal(PaxosService *other) so that 'this' service
    can request a proposal to 'other'

These functions should allow us to enforce a greater set of
constraints at time of a cross-proposal, either by making sure a
service will (e.g.) hold-off his own proposals until said proposal
is performed, or even that the other service will enforce a tighter
set of constraints that wouldn't otherwise be enforced by using
'propose_pending()' directly.

Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
mon: MDSMonitor: tighter leash on cross-proposals to the osdmon

Fixes: #3495

Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
mon: [MDS]Monitor: remove 'stop_cluster' and 'do_stop()'

Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>