Lazily allocate PCFilter

Summary: PCFilter basically holds a pointer to a trie, but it always allocated one
level. To avoid that, a couple of the PCFilters on ExecutionContext were
dynamically allocated. It seemed to make more sense to just lazily allocate
the root pointer, and avoid the double indirection.

While working on the diff I noticed that at each level, we were mallocing a
PtrMapNode, whose sole purpose was to hold a single, malloced pointer. So
I removed a level of indirection there too.

Reviewed By: @jdelong

Differential Revision: D1573909