Refactor Dockerfile, use pipenv for Python packages
This commit refactors the Dockerfile to use fewer layers when building
the image. It also re-arranges the order of how things are run to
benefit some steps like installing Python dependencies.
Ultimately, this commit leverages Pipenv for managing and installing
dependencies within the project. This is one additional change to
improving awareness of dependencies and ensuring development,
production, and staging will always use the same set of dependencies.