Adds planned optimizations for memoize

Summary: All optimizations have been moved out of emitter.cpp and into more appropriate places. Specific optimizations:
- HHBBC handles the old "blessed types" optimizations. It also adds a direct call to getInstanceKey() for typehinted objects that inherit HH\IMemoizeParam.
- The jit has a couple fast paths when it detects null or int at that level.
- A few better paths have been added to the runtime code. Ints are always used without serialization, and null, bool, and empty array always return static strings instead of building new strings.

Reviewed By: @elgenie

Differential Revision: D1706507

Signature: t1:1706507:1417565711:377fce22eb399f967d2a87ce3f5bb6fade04acb5
Fix JIT crash related to stack size limits.

Summary: Fix the JIT to distinguish between the native stack and the VM stack,
even when the VM stack ends up allocated in the virtual memory region
that was originally available to the native stack.  This situation
arises when the stack size limit (ulimit -s) is set very high, e.g.
unlimited, in which case shared libraries are loaded much lower in
memory in order to give the native stack lots of room to grow.

Reviewed By: @swtaarrs, @markw65

Differential Revision: D1736940