Refactor Roots.new and CLI

A lot going on here, I've been working on this for days. A short summary:

- Gutted the entire CLI, replaced optimist with argparse and restructured the relationship between the core API and CLI to be cleaner and easier to understand.
- Gutted the test suite, replaced should.js with chai, pulled out common helpers, cleaned up everything quite a bit
- Perf testing, implemented an interesting hack to lazy load dependencies where needed
- Wrote an entirely new cli test suite using sinon and mockery, which makes the tests quicker, more efficient, and test only what actually needs to be tested.
- Roots.new now returns a promise and emits progress events along the way