Add Support for Awaitable XHP
Add Support for Awaitable XHP

Adds support for generators inside XHP rendering. This makes one very
important change to basic XHP principles, and that is that the
rendering order can no longer be guaranteed. Previously, XHP would
follow a breadth-first rendering from `:x:element` to `:x:primitive`
(concurrently), but with this change, XHP will now render depth-first
in search of WaitHandles, batching together as many as it can.
Additionally, All `:x:elements` will be rendered before the
`:x:primitive` pass will begin. In theory this should have no affect
because XHP does not store or encourage storing of references to other
XHP elements (besides the parent, which still will be guaranteed to be
rendered first). However, it is still possible to manually keep
references and a variable rendering order has the potential to affect
code in unpredictable ways.

In terms of implementation, I wanted to just have `render()` without
the need for `genRender()`, then an interface would be all that was
needed, but the return type of `render()` would need to be different in
each case. I could get away without using the `XHPAwaitable` interface
and instead check for the `XHPGenerator` trait using `class_uses()`,
but this doesn’t check parent traits, so I would have to loop over each
element’s inheritance chain and that felt very ugly to me.

facebook/xhp-lib