allow more kinds of fields to take 0 space. fixes #8156

also initialize datatype->instance eagerly, so you don't need to check
for that everywhere. this also makes it easier to change the logic
of which types are singletons.
use correct predicate for which types are singletons
Merge branch 'jb/size0stuff'