Exposed ProfilerFactory for use in external profilers

Summary: This diff moves `ProfilerFactory` in ext_hotprofiler.cpp into the header
ext_hotprofiler.h with the `Profiler` definition.

Right now it is possible for an extension to define a profiler by just
including ext_hotprofiler.h, but there is no exposed unified way to attach it
to a thread. If one wanted to attach a profiler to a thread they would
essentially be duplicating the code currently in `ProfilerFactory`-- but
also they would have to synchronize the state of the request's `ProfilerFactory`
with their own.

Now an external profiler would just have to call `s_profiler_factory->start(...)`
and `s_profiler_factory->stop(...)` to start/stop profiling.

I've also removed the requirement that `ProfilerFactory::start` be called with
`RuntimeOptions::EnableHotProfiler` as it may not be necessary for external
profilers. Finally `ProfilerFactory::start` now returns a boolean indicating
whether or not it succeeded.

Reviewed By: @ptarjan

Differential Revision: D1434395