Raise ProfileNotFound if explicit profile does not exist

This accomdates these cases:

No --profile specified, use the default profile but don't error
if it doesn't exist.

If a --profile is specified, it has to exist or else we raise an
ProfileNotFound exception.  This includes the case where a user
explicitly says --profile default and the default profile does not
exist.  I've added tests for all three cases.

Additionally, I've changed the default value in the EnvironmentVariables
dict to have a None default value for the 'profile' var.  This is
consistent with how this is defined the the awscli.EnvironmentVariables
dict.  This resulted in me updating a testcase that specified its
own EnvironmentVariables dict.

This came about because of aws/aws-cli#133