If a slot is freed that isn't the last one, we'll set its destructor to
NULL to indicate that it's been freed and leave a hole in the slot map.
Check osd_destructors in osd_call() to avoid dereferencing a method that
is potentially from a module that's been unloaded.
While we're here, reduce the # slots as much as possible if we free the
last one. While we'll re-use unused slots anyways, if we're going to
bother reallocating at all then we might as well re-pack it as much as
we can.