OSD: update osdmap subscription proactively instead of when we want a new map
In most circumstances, the OSD does a one-time subscription for the "next map" from what it has. But in a few places, it will blindly take a map epoch from an incoming message (which might have a very old map) and sends it off as a subscription request to the monitor. Then when it gets the reply (containing lots of old maps), it does not clear out the subscription request, because the OSD only applies new subscriptions, it doesn't get rid of old ones. And the MonClient does not clear out OSDMap subscriptions because it doesn't handle the replies.
Fix this by making the OSD clear out subscription requests once it gets replies. This will require some intelligence — we can get multiple reply messages for a single request and don't want to blank them out early if not appropriate.