support for 'abstract final' classes

Summary: PHP5 prevents having both `abstract` and `final` modifiers on a class at
 the same time.

 However, there are coding patterns that include classes that are
 intended to be used only as a collection of static utility methods,
 especially for pre-namespace, or namespace-avoiding, code.

 * Like an 'abstract' class, these cannot be instantiated directly.
 * Like a 'final' class, these cannot be generally inherited.
 * Unlike either an abstract class or a final class with a private
   constructor, whole program static analysis should be able to easily
   determine that any return / parameter typehints referring to this
   class are prima facia incorrect because there *cannot* be instances
   that satisfy them.
 * Unlike a trait, public static functions, when invoked directly, can
   use self:: and/or static:: to access protected/private static
   functions.
 * Unlike a trait, these classes can inherit from other abstract /
   concrete classes.

 In this diff, the 'abstract final' class is not allowed to declare
 non-static functions/props on its declaration (but can inherit such
 functions/props due to traits and parent classes). It's also expected
 to not have any remaining abstract static functions.

Reviewed By: @paroski

Differential Revision: D1594095