typechecker: empty is analagous to isset

Summary: ... from the typechecker's perspective (since we don't
 distinguish between false and true at the type level). Also group
 together the handling of isset/empty/unset, since they're all
 pseudo-functions that actually correspond to different bytecode.

Reviewed By: @paroski

Differential Revision: D1596294
reflection support for first-class enums: ReflectionClass::isEnum [2/2]

Summary: The controversial portion of {D1589055}.
 * method ReflectionClass::isEnum : similar to is{Trait|Interface|Abstract}

Reviewed By: @paroski

Differential Revision: D1591338