nlHsTyApps: for applying a function both on type- and term-level arguments

(cherry picked from commit faeb0a687ea291cb2d497a7042af4829f55e223d)
When calling the success continuation of a matcher, pass existential tyvars
as type arguments, not value arguments

(cherry picked from commit 638991114f9358ee78f32d5d5c98bb3001b52ec9)
Group PatSyn req/prov arguments together so that they're not all over the place

(cherry picked from commit 65dc594b156c9cc5c2e9bc640f0762beaf3ca6ca)
Refactor PatSynBind so that we can pass around PSBs instead of several arguments

(cherry picked from commit 893a261c8c15783c8f86c74f4e8c57df9c44a155)
Rejig builders for pattern synonyms, especially unlifted ones

When a pattern synonym is for an unlifted pattern, its "builder" would
naturally be a top-level unlifted binding, which isn't allowed.  So we
give it an extra Void# argument.

Our Plan A involved then making *two* Ids for these builders, with
some consequential fuss in the desugarer.  This was more pain than I
liked, so I've re-jigged it.

 * There is just one builder for a pattern synonym.

 * It may have an extra Void# arg, but this decision is signalled
   by the Bool in the psBuilder field.

   I did the same for the psMatcher field.

   Both Bools are serialised into interface files, so there is
   absolutely no doubt whether that extra Void# argument is required.

 * I renamed "wrapper" to "builder".  We have too may "wrappers"

 * In order to deal with typecchecking occurrences of P in expressions,
   I refactored the tcInferId code in TcExpr.

All of this allowed me to revert 5fe872
   "Apply compulsory unfoldings during desugaring, except for `seq` which is special."
which turned out to be a rather messy hack in DsBinds

    (cherry picked from commit e876208117a34fb58f7f1e470de2f954b3ca303d)