WIP: Refactor auth (Not Ready For Merge)

TODO: Still adding tests, presently 44% coverage mostly focused around Auth and low hanging fruit

- Converts the deuceclient.auth.auth.Authentication into a Abstract Base Class with a small interface called deuceclient.auth.base.AuthenticationBase
- Introduces deuceclient.auth.openstackauth.OpenStackAuthentication which implements authentication using OpenStack Keystone Client.
- Introduces deuceclient.auth.rackspaceauth.RackspaceAuthentication which implements OpenStackAuthentication with a default endpoint of Rackspace Identity
- Fixes shell to be able to use the new authentication engine
The authentication data is presently read from a JSON file. The file historically just had username and APIkey. I extended it here to include any of the information - tenant id/name, user id/name, apikey, token, password, etc - that I am presently aware of - along with a couple shortnames for them that I have used in my JSON files.

The mapping just makes it easy to find them and prioritize which one takes precedence. See the find_user() and find_auth() functions right below the map for how it gets filled out.

I intend to eventually update some of this functionality to use Python Keyring functionality instead of the JSON file.