RFR: Begin Implementing Image Caching

This PR:

1. Renames all of the `cache_images` stuff to `cache_image` (singular).
2. Splits `makefs.sh` into two scripts: one which writes out an image, and another which copies a configdrive directory to disk.
3. Updates some Python to reflect item 2.
4. Causes `cache_image` to download and write out an image.

Notably, nothing here actually respects a cached image. Doing that is going to mean accessing some shared state from an `AsyncCommandResult` which is going to require some refactoring. I'd like to do that in a separate branch once this one is in.