Unmap the microdescriptor cache before replacing it.

This is a reprise of the fix in bdff7e3299d78; 6905c1f6 reintroduced
that bug.  Briefly: windows doesn't seem to like deleting a mapped
file.  I tried adding the PROT_SHARED_DELETE flag to the createfile
all, but that didn't actually fix this issue.  Fortunately, the unit
test I added in 4f4fc63fea0589a4fa03f3859dc27860cdde75af should
prevent us from making this particular screw-up again.

This patch also tries to limit the crash potential of a failure to
write by a little bit, although it could do a better job of retaining
microdescriptor bodies.

Fix for bug 8822, bugfix on 0.2.4.12-alpha.
Make all consumers of microdesc_t.body tolerate NULL

This is another fix to try to mitigate recurrences of 8031/8822.
Merge remote-tracking branch 'public/bug8822' into maint-0.2.4
Merge remote-tracking branch 'origin/maint-0.2.4'