Support for declarations and inheritance

Summary: Type constants is an alternative to using generic type parameters that
is restricted in such a way that Hack can reason about their types
statically. This diff is an initial version that adds support for:

* Initial syntax that will likely change
* Representing these declarations in the named and typed AST
* Type checks around inheritance and extension

In the naming phase there are three checks I want to call out that I
added.

1. Forgetting to assign a type to a non-abstract type constant
2. Attempting to assign a type parameter to a type constant
3. Using a non-local type parameter in the definition of a type constant

I added all of these checks as part of the nastCheck phase

Here are things that I plan on working on in future diffs:
* Creating a new type so Class::Typeconst can appear in typed positions
* Updating error messages specifically around inheritance
* Support for type params
* Allow co/contravariance annotations
* Finalize syntax

Reviewed By: @jwatzman

Differential Revision: D1633644