osd: fix osdmap caching
two issues (at least):
- we end up regenerating the osdmaps from disk data frequently
- we throw out cached copies in hadnle_osd_map only (?), which means we sometimes don't free them at all (if the last map ended up using a lot)
I think a robust solution to this will include:
- get_map returning shared_ptr<OSDMap*>. they are all read-only copies, so locking issues go away (for the maps themselves)
- some real-ish cache management, probably informed by peering: we keep them around if we are still peering anything, and are sure to trim when we are not.