Use MM for Certificate allocations

Reviewed By: @jano

Differential Revision: D1729481
Add support for reading XHP attributes via "->:"

Summary: This diff updates the typechecker to meaningfully parse XHP attribute
declarations and treat them as instance properties for most purposes, and
it adds support for "$obj->:xhp-attr" syntax for reading XHP attributes.
Writing to XHP attributes via "->:" is not supported for now.

XHP attribute declarations don't perfectly map onto Hack's type system, so
some adjustments were needed. XHP's "enum {..}" annotation gets converted
to int, string, or mixed depending on the enum's literal values. XHP's
"string" annotation needs to be converted to Stringish because in some
cases XHP allows "string" attributes to hold non-string values.

Finally, XHP lets the programmer import attributes declared in other XHP
classes using the bizarre "attribute :xhp-class;" syntax. This essentially
works like trait importation except, it only imports XHP attributes (and
like trait importation it can be transitive). This diff adds the necessary
plumbing to make the typechecker understand XHP attribute importation.

Reviewed By: @jwatzman

Differential Revision: D1681272

Signature: t1:1681272:1418413929:a4ae62fc5ad9dcd532ea21fd96e37254b278d45c