Smaller malloc hot path

This diff creates a much smaller hot path for allocation of small objects in jemalloc.

(1) we avoid having multiple copies of imalloc in the inlined path. In addition, we focus on only inlining the case where we're allocating small objects

(2) In the hot path we don't do the two-step decision on if something should be profiled or not. On the hot path this means accessing the thread's TLS data only once.

This isn't the cleanest code, since we're breaking a lot of layers of abstraction that were previously there. I'm sending this out as a first draft