Read parentheses better
Read parentheses better

Instead of pulling a token and looking for `'('` or `')'`,
just look for the character itself. This prevents us from
lexing every single item twice, once to see if it's a
left parenthesis and once to actually parse it.

Partially fixes #12665

Make parens faster more aggressively

* Strip spaces before parsing, so we never have to strip
the same spaces twice.

* String parsers together manually, to try to avoid unnecessary closure
creation.

Test Plan: Validate

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2630

GHC Trac Issues: #12665

sdiehl/ghc,shlevy/ghc,mettekou/ghc,mettekou/ghc,sdiehl/ghc,olsner/ghc,ezyang/ghc,olsner/ghc,sdiehl/ghc,sdiehl/ghc,ezyang/ghc,shlevy/ghc,shlevy/ghc,shlevy/ghc,mettekou/ghc,ezyang/ghc,sdiehl/ghc,mettekou/ghc,ezyang/ghc,ezyang/ghc,shlevy/ghc,shlevy/ghc,olsner/ghc,ezyang/ghc,olsner/ghc,sdiehl/ghc,olsner/ghc,olsner/ghc,mettekou/ghc,shlevy/ghc,olsner/ghc,mettekou/ghc,sdiehl/ghc,ezyang/ghc,mettekou/ghc