Switch to pipenv for managing requirements
With the move to snap as the recommended usage but with the need to support the library (pypi) version for OpenStack due to existing infrastructure requirements, we need to revisit how requirements are managed for charm-tools. The existing requirements.txt pins everything to rather old versions mainly as a hold-over from support for trusty to allow it to use the existing apt packaged versions available by default. For the snap, the dependencies are packaged in, so that's not necessary. For the OpenStack case, we still want to use newer packages.
I propose moving to pipenv to manage the requirements. It seems like a much better workflow for managing and updating dependencies, as well as making it easy to test with either locked or completely open dependency versions.