This patch removes the ping-pong style from HsPat (only, for now), using the plan laid out at https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow/HandlingSourceLocations (solution A).
- the class HasSrcSpan, and its functions (e.g., cL and dL), are introduced
- some instances of HasSrcSpan are introduced
- some constructors L are replaced with cL
- some patterns L are replaced with dL view pattern
- XPat is renamed to NewPat
- some type annotation are necessarily updated updated (e.g., Pat p --> Pat (GhcPass p))
- (there was a bug in an earlier version of this patch related to using functor on Located things that is fixed)