Paren sugar

Implement the `Foo()` paren sugar more uniformly as envisioned by the RFC.

r? @pcwalton 

Fixes #17703 (among other things).
We ought to investigate the cost of interning `ty_tup(Vec::new())`.
Actually, one idea I had (interning everything referenced by `Ty` in the arena) would result in `ty_tup(&'tcx [Ty<'tcx>])` which allows a statically declared `ty_nil` as `ty_tup(&[])`.