Adding credential providers and refactoring creds.

This commit adds a concept of credential providers, or functions that
when called return credentials or return null. This commit introduces
several credential providers that allow you to compose conditional
credential loading logic based on the environment the code is run in.

Addresses #371 

Some examples:

```php
use Aws\Common\Credentials\Provider;

// Create a provider function that returns credentials.
// Load from environment variables.
$provider = Provider::env();
$credentials = $provider();

// Load from an ini file using the default profile
$provider = Provider::ini();
$credentials = $provider();

// Load from an ini file using a specific profile
$provider = Provider::ini('foo');
$credentials = $provider();

// Loads from a chain of providers (does not throw if they all return null)
$chainProvider = Provider::chain(
    Provider::env(),      // Try the environment first
    Provider::ini('foo'), // Try a specific profile from the ini file
    Provider::ini(),      // try the default profile
    Provider::chain(Provider::instanceProfile()) // You can even put chains inside of chains!
);
$credentials = $chainProvider(); // might return null!

// fromChain() executes provides in order until one returns credentials.
// If no credentials are found an exception is thrown.
$credentials = Provider::resolve(Provider::chain(
    Provider::env(),
    Provider::ini(),
    Provider::instanceProfile($config)
));
```

Credentials are then passed as normally to a client via the factory method:

```php
$s3 = Aws\S3\S3Client::factory([
    'region'      => 'us-west-2',
    'version'     => 'latest',
    'credentials' => $credentials
]);
```

Or, you can provide a credential provider to the 'credentials' option:

```php
$s3 = Aws\S3\S3Client::factory([
    'region'      => 'us-west-2',
    'version'     => 'latest',
    'credentials' => Provider::defaultProvider()
]);
```
I thought about that too, but I kept these here for backwards compatibility with v2. Maybe this doesn't matter that much and they should be moved anyway?