Support for Creating Variants on Demand

This is initial support for what will later become lazy loading of variants I imagine. This also solves a use case of wanting to render media after the variant tree has been process and the files are stored on some filesystem. It becomes difficult to process a new variant later because we are not dealing with a filesystem that is local so we must get a copy of the file that will be the parent and create a temporary file on the local system that will be used as the initial to create a new context from. We may also want to update variants due to design changes such as the width and size and we should not have to re-upload the original and process the full tree again.

This is in early stages, but wanted to create a pull request for feedback and regarding thoughts/roadblocks that may occur. I am also looking to start a conversation on abstracting some of the processing logic out of MediaStorage as this class is acting as a God class and currently doing a lot of work... Other pull request may be started based off how that goes.