Use dependency injection to manage per-build temporary directories

This is the first step toward eliminating the `Component` kitchen-sink
base class.
Use dependency injection to manage cache directories
Remove the timer; this will be revived in the future
Simplify error handling now that we are using promises
Remove now-redundant Component base class
Update CHANGELOG