New python-based build system
pymake: fix double-make race condition

The old dependency resolution algorithm would cause shared
targets to built more than necessary because jobs were dispatched
in parallel. That parallelism wasn't really exploitable since this
computation is done in Python anyway. This new one serializes job
dispatch to avoid races.
Rename make.py to makefile.py
pymake: cache results of CPPincludes()

CPPIncludes() invokes the C compiler which is expensive if you just
want to generate the build dependency graph. This change caches the
results of that to speed it up.