boot: Try hard to exit on boot failure

When we fail to boot, a component may have, for example, created a
thread which will now never quit properly.  We try to shut down
cleanly, but fall back to a hard exit in a couple seconds if it
doesn't work.

It may actually be useful to raise the down events on core even
though we've never gone completely up, but this also seems like
a hack.