2 phase build

Splits the build actions into context generation and the actual build steps that (could) output files.

This change allows for more atomic utility methods that can easily be implemented as grunt tasks and external APIs.