librustc: Apply coercions to return expressions.

Fixes #12755.

r? @nikomatsakis
Where there is an expected type, you probably want to write that instead of the actual type for the block.

I think you also need to use a coercion rather than a subtype check when checking ExprRet and the tail expr in check_fn