Update requests imports to vendored botocore location
Add a "configure" top level command

This command will allow a user to be interactively prompted for values:

  $ aws configure
  AWS Access Key ID [****************]: accesskey
  AWS Secret Access Key [****************]: secretkey
  Default region name [us-west-2]: us-west-2
  Default output format [None]: json

This will automatically create an `~/.aws/config` file and write out the
values to this file.  This can also be used to update existing values.
If you run the `configure` command with existing values then the current
value will be provided in `[brackets]`, you can hit enter to accept the
current value or provide a new value.

Care was taken to *not* touch any unchanged data on updates.  This means
we don't just simply load the parsed config data, manipulate it, the use
ConfigParser to write out the new data.  This would lose the existing
formatting of the file as well as any comments in the config file.
If I have a config file like this:

  aws_access_key_id = myaccesskey
  aws_secret_access_key = secretkey
  ; Here's a comment.

  # Here's a nother comment.
  ; And another comment
  output = text  ; Use text output instead of json
  region = us-west-1

And I run `aws configure` and only enter a value for *just* the region, then
only the region line will be changed.  All the existing comments will be
preserved.

Internal Changes
================

Part of this change is the introduction of a `BasicCommand` class that
makes it much easier to create top level commands.  It supports:

  * Defining documentation on the command object
  * Defining an argument table on the command object
  * Automatically managing the argparse creation
  * Automatically providing a "help" command

It doesn't support subcommands (mostly because the "configure" command
doesn't have any right now), but I do plan on adding support for
subcommands.

When this means for plugin writers is that you only have to define a
single class to create a new to level command.

This required some small changes to `bcdoc` related to pulling up the
synopsis/option handlers into the base handler class so that we can have
the same look and feel as built the arguments for built in operations.
Merge branch 'vendor-requests' into develop

* vendor-requests:
  Update requests imports to vendored botocore location
Fixed generation of ISO timestamp for policy expiration.  Fixes #456.
Merge branch 'configure-cmd' into develop

* configure-cmd:
  Add a "configure" top level command
Bump version of bcdoc
Update changelog for 1.2.3
Bumping version to 1.2.3
Merge branch 'release-1.2.3' into develop

* release-1.2.3:
  Bumping version to 1.2.3
Double quote exclude/include args

This makes the examples work on Windows, Linux, and Mac.
Allow a value of all or -1 to be passed to the --protocol option for authorize/revoke commands.  Fixes #460.
Update changelog with s3 command bug fix
Merge branch 's3-docs' into develop

* s3-docs:
  Double quote exclude/include args
Merge branch 'fix-460' of git://github.com/garnaat/aws-cli into garnaat-fix-460
Specify the path for the config file

That information is present in the `aws-cli.pdf` file but not in
the README file.

This commit also adds whitespace in between the paragraph that discusses
the multiple profiles and the paragraph that talks about moving the
config file location.
Move the 'ls' command into a separate Command object

This fixes issue #439.  The bigger change here is that
I'm starting to break up the commands to not go through
the same generic processing.  There are certainly commands
that have *some* similarity, but not all commands are the same.

Particularly commands like `ls`, `mb`, `rb` can be pulled out
into their own subclasses with their own logic.
Remove banners from s3 ls command
Remove mentions of ls in main subcommand
Add detailed error message on local file encoding errors

The general error was that `list_files` was raising an exception
that would propogate up to the main clidriver handler and stop
execution.  While `list_files` is doing the right thing, there were
a few issues:

* There were no error message logged to the console (bug in log configuration).
* There were debug logs that indicated an error but the error message
  was vague and complained about a UnicodeDecodeError.  It also wasn't
  clear why it happened or how to fix it.

As to why `list_files` is raising an exception:

The issue is with the call `os.listdir(<unicode>)`.  What is *suppose*
to happen in this case is that python should return unicode objects
if called with a unicode object, and should return bytestrings if called
with a bytestring.  So in python2:

    os.listdir(u'.') -> [u'unicode']
    os.listdir('.') -> ['not unicode']

In order to decode the bytes to unicode it uses
`sys.getfilesystemencoding()`.  On Mac/Windows, these values are
hardcoded, but on unix, this is loaded via `nl_langinfo(CODESET)`,
which maps to the `LC_CTYPE` env var.

This is documented here http://docs.python.org/2/library/sys.html#sys.getfilesystemencoding

However, `os.listdir` will return the original bytestring
*if it fails to decode the bytestring* using getfilesystemencoding()`.
The full picture is therefore:

    os.listdir(u'.') -> [u'unicode']
    os.listdir(u'.') -> ['possibly byte string if decoding fails']
    os.listdir('.') -> ['byte string']

Once this happens we're calling `os.path.join(<unicode>, <byestring>)`,
which means we'll need to decode the bytestring to unicode.  In this
situation we use `sys.getdefaultencoding()`, which is likely going to be
ascii, hence the error message about the ascii codec not being able
to decode a byte.

One alternative considered was to just skip the file if we can't decode
the object to unicode.  However, if someone uses the `--delete` flag,
skipping the file will result in the file being deleted on the other
end, which not not desired behavior.

The error message when this happens looks like this:

2013-11-05 18:28:50,195 - awscli.customizations.s3.s3handler - ERROR - Exception caught during task execution:
There was an error trying to decode the the file "\xce\x24" in directory "/home/mydir/sync/bar/": 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)

Please check your locale settings.  The filename was decoded as: ANSI_X3.4-1968
On posix platforms, check the LC_CTYPE environment variable.

Closes #383.
Add tests for new ListCommand

Verify we're only making the minimum required amount of calls.