Use real types for build instructions
Summary:
Refactored build instructions to use concrete types and
build.Instruction as an interface instead of relying on a simple enum
and arbitrary string arguments. The formal types result in:
- Clearer internal data structures
- Partial compilation and proper argument quoting for all instructions moved into the common build package
- Higher order instructions like build.RunAll that easily reduce to compiler specific output
Test Plan: Run arc unit or go test ./...
Reviewers: thcipriani, mmodell, Release-Engineering-Team
Reviewed By: thcipriani, Release-Engineering-Team
Tags: Release-Engineering-Team
Differential Revision: https://phabricator.wikimedia.org/D741