Make singleConstructor cope with pattern synonyms
Previously, singleConstructor didn't handle singleton COMPLETE sets
of a single pattern synonym, resulting in incomplete pattern warnings
in Trac #15753.
This is fixed by making singleConstructor (now named
singleMatchConstructor) query allCompleteMatches, necessarily making
it effectful. As a result, most of this patch is concerned with
threading the side-effect through to singleMatchConstructor.
Unfortunately, this is not enough to completely fix the original
reproduction from Trac #15753 and Trac #15884, which are related to function
applications in pattern guards being translated too conservatively.