Update .gitignore.
Remove some nonsensical code.

Lazy I/O can't magically cause a live reference to get garbage collected.
80-col violation.
Remove hack to append "-o a.out" when we actually don't want to build any executeble.

This behaviour
  * caused parmake / ghc to compile with only one thread in cetain
    situations
  * hid the bug that using only ghc -M and then ghc -c per module,
    parmake *cannot* detect whether an external (e.g. used package)
    module (interface file) changed when doing an incremental build
    (ghc itself can detect that).
    We will have to detect this by inspecting .hi files, like ghc does.
Don't pass --help and -V flags to GHC.

This looked like a good idea first, but sometimes we really want to talk to parmake.

For determining the ghc version as cabal does, passing through --numeric-version is enough.
Re-organize passing on to GHC
Parse: Don't return [] when getModuleDeps fails. exit 1 instead.
BuildPlan: Add TODO about readySet == [] in new
BuildPlan: Don't assume Makefile is sorted
BuildPlan: error on target with empty dependencies
Use -include-pkg-deps to also depend on system and package .hi files.

This way we can detect correctly when external code changes.

For a case where this failed before, see https://github.com/JohnLato/parmake-bug.

This also needs changes to:

- BuildPlan.new:
  When determining the initially buildable modules, before we chose the ones with exactly one dependency.
  Now, we don't count external files into those dependencies, as they do not need to be built.

- Parse:
  We need to run ghc -M twice:
  Once for getting the normal Makefile-style dependencies, and once to get *all* dependencies (using -include-pkg-deps).
  From their difference, we can obtain the set of external dependencies.
  We now also have a `Dep` type to contain these internal and external dependencies.