codegen: Make constructors of objects with vtables protected.

Due to some weird things MSVC does, it is tricky to instantiate them
properly, and it's best to use the df::allocate<T>() function at all
times. This change makes it impossible to use ordinary new by mistake.

Viewscreen needs a hack because it's included as a field in interfacest.