This implements the gcc builder in build.py script to allow it to
compile host executables when running on a non-windows host. Where it
made sense, I tried to share code with the msvc builder by moving stuff
to the base class.
I did not implement the lto part because I don't know how that works,
(and it's likely things will differ between platforms there).
Why do we need this?