Paren sugar

Implement the `Foo()` paren sugar more uniformly as envisioned by the RFC.

r? @pcwalton 

Fixes #17703 (among other things).
@eddyb see also https://github.com/rust-lang/rust/issues/18614