Refactored default credentials and added environment credentials

Two immediate benefits of this change are:

- Environment credentials that can be provided to Beanstalk environments via the console can now be picked up by the SDK automatically
- It's now possible to use environment credentials in your development environment, which makes it easy to run your app locally if your production environment relies instance profile credentials by using environment credentials, which require no code changes to your app.