Moved the startup logging code around.

This will help me time how long it takes to startup miro better.
Refactored the startup checks code

I think it makes sense to put them in the same class since they're so
closely tied together.  Also made it so in the normal case, we don't
use any idle callbacks.  I'm not sure if this will make a big
difference, but it could be faster and it doesn't hurt anything.
Added some debugging printounts for startup times
Startup cleanup phase one.

Moved a bunch of code to run later on in the startup process.  The
idea is to make as little as possible run in the backend until we have
our window up.

Renamed some of the functions in startup.py and added docstrings.

Don't setup app.transcode_manager.  We don't actually use that
anywhere.
Wait until the frontend is started up to run icon cache updates
Wait until the frontend is started to setup the device tracker.

Made device tracking implicit.  The frontend no longer has to send the
TrackDevices message.
Don't track shares until after the frontend has started
Load search engines lazily

Loading engines actually takes a somewhat large amount of time, so we
shouldn't do it until we need to.
Another sharing speedup.

Defer calling mdns_init() until we really need to.
Don't load the progress bar inactive surface.

It takes a non-negligable amount of time and we don't actually use it.