Rewrites, add support for subprojects

Long-term goal: port llvm to Makelib