Arbitrary tags

Addressing #56 by implementing https://github.com/UCSD-PL/RefScript/issues/56#issuecomment-58358272

The DotRef operation is still done "programmatically", i.e. not using a `getProp` signature in `prelude.ts`, due to issues with subtyping unions. 

The `keyVal` predicate is added whenever the accessed field is immutable.