Add virtual features to Dictionary

This is the _bare_ minimum change to convert `FeatureMeta` into an ADT (except for the dense row change).

Now is a Good Time to get the naming/layout of this new constructor correct.

The next step will be to add support for the dictionary parsing, and then thrift support.

/cc @etorreborre @raronson @markhibberd 
I know that ideally we never have `FeatureMeta` as a `type`, but this was a way to avoid having to error out for an impossible case at a later stage. Happy to do this differently if people prefer.