Streamlined a Deployment Process

Cut our CircleCI build times in half

Or, Dockerfiles, npm packages, and caching, oh my!

Our build times were ranging around 35-40 minutes total for testing, building, and pushing to our image repositories. Our Dockerfile had us downloading our npm packages after code changes, which meant we were rebuilding the entire docker image almost every time. Some rearranging to take advantage of caching docker layers, along with moving to multi-stage builds (again, taking advantage of caching docker layers in Circle) instead of saving/retrieving from a workspace brought our build times down from painful (I just want to do a simple bug fix; why is it taking so long???) to manageable.