MonSub is extracted so crimson/mon/MonClient can reuse it.
also, it's more readable this way:
- use ceph::coarse_mono_time instead of utime_t for renew_sent, and
renew_after timestamps
- modernize the code using C++17
* use range-based loop
* use structured-bind
- fix the anti-pattern of map.count(foo) and then map[foo], use
auto i = map.find(foo); instead.
- some logging messages are dropped in this refactory, but they are
printed only when talking with pre-infernalis monitor.