Pluggable credentials

This branch refactors the credentials handling code in S3 to provide:
* A base infrastructure for pluggable credential providers
* The S3 code now uses the base infrastructure
* Existing credential registration functions add them into the base infrastructure

The idea here is to decouple credentials from the code that makes use of them, and allow for scenarios such as a daemon that provides short-lived credentials on demand or instance-based credentials on Amazon.

I'm primarily looking for comments on the design; please ignore the unfortunate noise in the early commits.