Introduce arraykey type

Summary: The keys of Hack collections only allow ints or strings at runtime. The
type checker is currently unaware of this restriction. Keys for PHP
arrays also have this restriction, with the addition that floats and
nulls will be implicitly converted to either ints or strings, something
we probably do not want in Hack.

This is the inspiration of the arraykey type. It is simply a union type
of int and string so Hack is aware of what valid array/Collection keys
are.

I still need to add HHVM support, and update the hhi files for
collections to use these types but I will do so in follow up diffs.

Reviewed By: @jwatzman, @elgenie

Differential Revision: D1543856