Factory goes through runtime specialization

instead of the basic class. And new gets specialized, so we make
as little use of reflection as possible. Also the reflection stuff
is moved outside the critical path, so bmarks should look good :D