default to IsA for class names in contracts, and add a built-in contract called Exactly (fixes issue #39)