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()
]);
```
It would be better to set `$args['credentials']` to the provider callable than to its result.

    $args['credentials'] = Provider::ini($args['profile']);

Currently, if the provider returns `null` (like if you specify a non-existent profile), then the user gets a cryptic error like

> Uncaught exception 'InvalidArgumentException' with message 'credentials is a required option'

This happens because the `ClientFactory::handle_credentials` method does not do anything with `null` values, and passes that straight into the client object.