Use a cleanroom for evaluating a builder

This PR does a few things:

1. It uses a cleanroom to evaluate the `build` steps, preventing unwanted method exposure
2. It proxies **all** software methods to the builder as exposed DSL methods
3. It uses the `Util#shellout` for shelling out (which is now consistent across the entire project)
4. It merges `:env` and `:environment` keys for consistency when shelling out
5. It adds a ton of documentation around the methods available in the build DSL
6. It searches all paths (including `software_gems` paths for patches and erb files)
7. It adds runtime methods for `copy`, `move`, `touch`, and more (/cc @oferrigni)
8. Instruments each build item individually (and then aggregates the entire build time)
9. Wraps all commands (procs and strings) in a `BuildCommand` abstraction

/cc @opscode/release-engineers @danielsdeleo