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 
Pass the relevant contents of FeatureMeta if that is too much, then FeatureMeta should just have a single value which is a single value. There are a couple of concerns with this, mainly implicit upcasting and all the combinators will return the incorrect generic type.