WIP: Put hole instantiation typechecking in the module graph

Backpack instantiations need to be typechecked to make sure that the
arguments fit the parameters. `tcRnInstantiateSignature` checks
instantiations with concrete modules, while `tcRnCheckUnitId` checks
instantiations with free holes (signatures in the current modules).

Before this change, it worked that `tcRnInstantiateSignature` was called
after typechecking the argument module, see `HscMain.hsc_typecheck`,
while `tcRnCheckUnitId` was called in `unsweep'` where-bound in
`GhcMake.upsweep`. `tcRnCheckUnitId` was called once per each
instantiation once all the argument sigs were processed. This was done
with simple "to do" and "already done" accumulators in the fold.
`parUpsweep` did not implement the change.

With this change, `tcRnCheckUnitId` instead is associated with its own
node in the `ModuleGraph`. Nodes are now:
```haskell
data WorkGraphNode
  = InstantiationNode IndefUnitId
  | ModuleNode ModSummary
```
instead of just `ModSummary`; the `InstantiationNode` case is the
instantiation of a unit to be checked. The dependencies of such nodes
are the same free holes as was checked with the accumulator before. Both
upsweeps on such a node call `tcRnCheckUnitId`.

The instantiation nodes are not depended on by other nodes; `tcRnCheckUnitId` is
just being called for errors. I do take this as evidence for the argument that
perhaps my patch is over-engineered; one could also just leave the graph as-is
and post upsweep `tcRnCheckUnitId` all unit-ids unconditionally. Now, if there
is extra `-j` sooner one can get the errors quicker than that with mine, but
without the dependencies into the merged node (mimicking the eagerness of the
fold of the sequential upsweep) this isn't guaranteed to happen.

I admit I went with the current approach before I realized that nothing
else depended on the effects for `tcRnCheckUnitId`, but I still think
it is the right one with future changes in mind. For this, I refer to
"Note [Identity versus semantic module]". The current reasoning appeals
to the compilation pipeline invariants, but if we get multi package
support [proposal 23], we could have all three of the original
signature, argument, and instiation in home packages. I think having
separate dependency nodes for each of those 3 might yield more
incrementality and/or parallelism, especially if nodes became per
pipeline stage.

Fixes #17188

Things yet to do:

* [ ]  There are extra numbered steps that don't print out, probably should have some `[m of n] checking instantiation ...`

* [ ]  Errors are rendered slightly differently for some reason

[proposal 23]: https://github.com/ghc-proposals/ghc-proposals/pull/263
15 jobs for backpack-j-8.6 in 417 minutes and 49 seconds (queued for 1 second)
latest
Name Stage Failure
failed
validate-x86_64-darwin Full Build There has been a timeout failure or the job got stuck. Check your timeout limits or try again
No job log
failed
validate-i386-linux-deb9 Full Build
$ cp -Rf $HOME/.cabal cabal-cache
Uploading artifacts...
ghc.tar.xz: found 1 matching files
junit.xml: found 1 matching files

Uploading artifacts to coordinator... ok
id=178830 responseStatus=201 Created token=Q85zZxUX
Uploading artifacts...
junit.xml: found 1 matching files

Uploading artifacts to coordinator... ok
id=178830 responseStatus=201 Created token=Q85zZxUX
ERROR: Job failed: exit code 1
failed
validate-x86_64-windows Build
junit.xml: found 1 matching files                  
WARNING: Failed to load system CertPool:crypto/x509: system root pool is not available on Windows
Uploading artifacts to coordinator... ok
id=178826 responseStatus=201 Created token=KaoGqUyq
Uploading artifacts...
Runtime platform
arch=amd64 os=windows pid=6316 revision=1f513601 version=11.10.1
junit.xml: found 1 matching files

WARNING: Failed to load system CertPool:crypto/x509: system root pool is not available on Windows
Uploading artifacts to coordinator... ok
id=178826 responseStatus=201 Created token=KaoGqUyq
ERROR: Job failed: exit status 2
failed
validate-aarch64-linux-deb9 Full Build
$ cp -Rf $HOME/.cabal cabal-cache
Uploading artifacts...
WARNING: ghc.tar.xz: no matching files
WARNING: junit.xml: no matching files
ERROR: No files to upload
Uploading artifacts...
WARNING: junit.xml: no matching files
ERROR: No files to upload
ERROR: Job failed: exit code 1
failed
validate-x86_64-linux-deb9-integer-simple Full Build
make[1]: *** [test] Error 1
make: *** [test] Error 2
Makefile:223: recipe for target 'test' failed
Running after script...
$ cp -Rf $HOME/.cabal cabal-cache
Uploading artifacts...
junit.xml: found 1 matching files
Uploading artifacts to coordinator... ok
id=178834 responseStatus=201 Created token=HrDToMkP
ERROR: Job failed: exit code 1
failed
release-x86_64-linux-deb9-dwarf Build
$ cp -Rf $HOME/.cabal cabal-cache
Uploading artifacts...
ghc.tar.xz: found 1 matching files
junit.xml: found 1 matching files

Uploading artifacts to coordinator... ok
id=178825 responseStatus=201 Created token=xNKaqoBZ
Uploading artifacts...
junit.xml: found 1 matching files

Uploading artifacts to coordinator... ok
id=178825 responseStatus=201 Created token=xNKaqoBZ
ERROR: Job failed: exit code 1
failed
validate-i386-windows Build
junit.xml: found 1 matching files                  
WARNING: Failed to load system CertPool:crypto/x509: system root pool is not available on Windows
Uploading artifacts to coordinator... ok
id=178827 responseStatus=201 Created token=VaF4zUJV
Uploading artifacts...
Runtime platform
arch=amd64 os=windows pid=6188 revision=1f513601 version=11.10.1
junit.xml: found 1 matching files

WARNING: Failed to load system CertPool:crypto/x509: system root pool is not available on Windows
Uploading artifacts to coordinator... ok
id=178827 responseStatus=201 Created token=VaF4zUJV
ERROR: Job failed: exit status 2
failed
validate-x86_64-windows-hadrian Full Build
   Bytes :   1.971 g   1.971 g         0         0         0         0
Times : 0:02:35 0:02:30 0:00:00 0:00:04


Speed : 14032133 Bytes/sec.
Speed : 802.925 MegaBytes/min.
Ended : Wednesday, October 16, 2019 12:23:45 AM

ERROR: Job failed: exit status 1
failed
validate-x86_64-linux-deb9-llvm Full Build
make[1]: Leaving directory '/builds/obsidiansystems/ghc/testsuite/tests'
make: *** [test] Error 2
Makefile:223: recipe for target 'test' failed
Running after script...
$ cp -Rf $HOME/.cabal cabal-cache
Uploading artifacts...
junit.xml: found 1 matching files
Uploading artifacts to coordinator... ok
id=178831 responseStatus=201 Created token=7m2Z971e
ERROR: Job failed: exit code 1
failed
validate-x86_64-linux-deb9-unreg Full Build
$ cp -Rf $HOME/.cabal cabal-cache
Uploading artifacts...
ghc.tar.xz: found 1 matching files
junit.xml: found 1 matching files

Uploading artifacts to coordinator... ok
id=178835 responseStatus=201 Created token=y7moaG-T
Uploading artifacts...
junit.xml: found 1 matching files

Uploading artifacts to coordinator... ok
id=178835 responseStatus=201 Created token=y7moaG-T
ERROR: Job failed: exit code 1