Cleanup var-promote

This cleans up var-promote and demote. It fixes a few bugs but I'm holding off on fixing the whole thing as I devise a strategy for structural traversals over types that handles variance.