Fix respidering inhibited by diagnostic blockage.

When message received on `diagnosticSpiderKill` I was failing to set
`diagnosticSpiderDummy` false again, so the next attempt to start a
dummy would return early, so there would be nothing listening on the
`diagnosticSpiderKill` channel after the first dummy is killed.

With a buffered channel, the second kill request was ignored, but stuck
in the channel, and so a third kill request would block; that would
block the invoker's channel.

This change makes some channels synchronous, as it's easier for
debugging and making problems reveal themselves, even if synchronous
might not be strictly needed.  Being synchronous does make it easier to
reason about the dummy-spider vs spider switch-out.  All that, just to
make sure that a diagnostics request would always have something
draining the channel.

Also: made the persisted lock a `sync.RWMutex` instead of a `sync.Mutex`
and use read-locks as appropriate: in theory, permits high web query
rates, since each web request locks this mutex to get the persisted
state.