In pattern synonym matchers, support unboxed results.

This requires ensuring the continuations have arguments by adding a dummy
Void# argument when needed. This is so that matching on a pattern synonym
is lazy even when the result is unboxed, e.g.

    pattern P = ()
    f P = 0#

In this case, without dummy arguments, the generated matcher's type would be

   $mP :: forall (r :: ?). () -> r -> r -> r

which is called in `f` at type `() -> Int# -> Int# -> Int#`,
so it would be strict, in particular, in the failure continuation
of `patError`.

We work around this by making sure both continuations have arguments:

  $mP :: forall (r :: ?). () -> (Void# -> r) -> (Void# -> r) -> r

Of course, if `P` (and thus, the success continuation) has any arguments,
we are only adding the extra dummy argument to the failure continuation.
Add a dummy Void# argument to pattern synonym wrapper
if it has no arguments and returns an unboxed type (see #9732)
Binding things matched by an unboxed pattern synonym should require a bang
Test case for matching on unboxed pattern synonyms
Test cases for bidirectional, unboxed pattern synonyms