Choice

Big pull request from the semantics branch. This incorporates (if I haven't screwed anything up) Spiros and Arjun's latest fixes.