Change '!' syntax and semantics to be uniform

! now prefixes a simple expression (most likely a name or a bracketed
application). !x means that the expression x (of type 'm a') will be
bound using >>= in the current scope. i.e.

foo !x
becomes
x >>= (\tmp => foo tmp)