Add backward-compatible support for Python 3.3+

This pull request adds backward-compatible support for :snake:**Python 3**, specifically versions 3.3 and 3.4. It **drops support** for Python 2.5, but continues to work with 2.6 and 2.7. Not all modules work with Python 3 - currently supported are S3, SQS, Kinesis and CloudTrail.

* Modernized most of the codebase to use Python 3 compatible exception handling, iterator handling, etc.
* Vendored the `six` library to help with porting
* Updated the `boto.compat` module to help keep code clean similar to [Botocore](https://github.com/boto/botocore/blob/develop/botocore/compat.py)
* Added a [porting guide](https://github.com/danielgtaylor/boto/blob/py2and3/docs/source/porting_guide.rst) to help community members port modules to Python 3
* Update dev dependency versions, add `coverage` to default requirements
* Got unit and integration tests passing using a whitelist for Python 3 (see `tests/test.py` and the new `default` target)
* Fixed a few integration tests that were failing on Python 2.6.x
* Updated `tox` config to run against Python 3.3 and 3.4
* Updated Travis CI to run tests for Python 3.3 and 3.4 ([example](https://travis-ci.org/danielgtaylor/boto/builds/28272351))
* Updated README and Sphinx docs about Python 3

Please take a look @jamesls, @garnaat, @toastdriven.
I'm seeing a strange error with sqs unit tests.  It's working for me every other time I run it. Consistently.

The error I'm getting is:

    Traceback (most recent call last):
      File "/Users/Mitch/projects/boto3/boto/tests/unit/sqs/test_connection.py", line 217, in      test_send_message_attributes
        'Version': '2012-11-05'
      File "/Users/Mitch/projects/boto3/boto/tests/unit/__init__.py", line 69, in assert_request_parameters
        self.assertDictEqual(request_params, params)
    nose.proxy.AssertionError: {'MessageAttribute.1.Name': 'name1', 'Action': 'SendMessage', 'MessageBody': 'Te     [truncated]... != {'Version': '2012-11-05', 'MessageAttribute.1.Name': 'name2', 'MessageAttribute. [truncated]...
      {'Action': 'SendMessage',
    -  'MessageAttribute.1.Name': 'name1',
    ?                                  ^

    +  'MessageAttribute.1.Name': 'name2',
    ?                                  ^

    -  'MessageAttribute.1.Value.DataType': 'String',
    -  'MessageAttribute.1.Value.StringValue': 'Bob',
    -  'MessageAttribute.2.Name': 'name2',
    -  'MessageAttribute.2.Value.DataType': 'Number',
    ?                    ^

    +  'MessageAttribute.1.Value.DataType': 'Number',
    ?                    ^

    -  'MessageAttribute.2.Value.StringValue': '1',
    ?                    ^

    +  'MessageAttribute.1.Value.StringValue': '1',
    ?                    ^

    +  'MessageAttribute.2.Name': 'name1',
    +  'MessageAttribute.2.Value.DataType': 'String',
    +  'MessageAttribute.2.Value.StringValue': 'Bob',
       'MessageBody': 'Test message',
       'Version': '2012-11-05'}