Add simple explicit subtyping (casting)
Add variants and fix a hard-to-believe bug