Use late static binding in factory constructors

This allows for more predictable behaviour when invoking factory
constructors in subclasses.