allow `discard` in generic noncopyable type
A bug was preventing you from writing `discard self`
in a consuming method of a generic noncopyable type.
The main cause was the `isPureMoveOnly` ignored
unbound generic types, claiming none of them are
noncopyable. Then I also needed to pass the contextual
type with the vars bound to the type checker.
rdar://108975216