Refactor fetchurl handling in stdenvLinux

All the different stages of stdenv had the fetchurl inherited anyways,
so make this generic in stdenvBootFun.

This commit doesn't change the outhash (or drvhash) of the stdenv.
Refactor wrapGCC in stdenvLinux

Don't use default parameter values, to make the callsites more readable
and for easier debuggability/changability.  Also reordered the
callsites' parameter ordering for consistency.

In the final stdenv don't repeat the name of the shell.

This commit doesn't change the outhash (or drvhash) of the stdenv.
Refactor stage handling in stdenvLinux

Make stages explicit and generalize the pattern of having an stdenv and
a pkgs collection for all stages to a common stage generating function
called stageFun.

Rewrite all stage handling with this new function.

This commit doesn't change the outhash (or drvhash) of the stdenv.
Move wrapGCC helper up

This commit doesn't change the outhash (or drvhash) of the stdenv.
Refactor stages to only ever refer to the previous stage

This commit doesn't change the outhash (or drvhash) of the stdenv.