Add task profiler, which works by instrumenting each task runtime when enabled.

@pcwalton - I'm not sure if there's any gotchas or downsides to profiling using this technique to instrument the runtime. Happy to close this if it doesn't seem like a good idea to you. r?

This will stop working at some Rust upgrade, as the Runtime trait is going away. I'm OK with this as long as there's a note that it may be removed some point. (I think changes are decent that we will switch to a Job Queuing system at some point anyway, at which point this will need to be rewritten, so that's fine)