Bounce/Complaint message handling

Added support for handling bounce/complaint messages via Amazon's Simple
Notification Service (SNS). The SNS service can send a POST request
containing JSON to your application whenever a bounce or complaint
message is received.
See: http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/NotificationsViaSNS.html

This implementation handles the POST message and parses out the JSON and
sending an appropriate signal (bounce_received or complaint_received).
The bounce can then be handled appropriately by the application.
Object Formatting Changes.
Pass raw_message to signals
Updated error handling in the handle_bounce view.
Added signal handlers for logging to the DB.

Added the log_bounce_to_db and log_complaint_to_db signal handlers.
These signal handlers are provided as-is and need to be connected
to the appropriate signal in the user's application.
Signal handlers commit to the DB on success.
Fixed __all__ in models.py
Updated the bounce handler.

Fixed the bounce handler to handle the correct notification format as
received from SNS.
Updated the example app.

Updated the example app so that it could be used to test
SNS bounce notifications.
Removed pdb code :(
Removed handlers.

Removed the provided signal handlers to log to the DB
since I'll add them to a separate branch.
Fixed tests
Updated docstring for handle_bounce.

Updated the docstring for the handle_bounce view to add
information about the signals called.
Removed python-dateuil from requirements

Removed python-dateutil from the requirements since
it was only used by the provided signal handlers.
Fixed the test_handle_complaint() test.

Fixed a careless mistake encoding the complaint
notification JSON.
Implemented verifying SNS bounce messages.

The following has been implemented:

1. Decoding the signature
2. Downloading and extracting the public key for the signing
certificate.
3. Generating the message to sign.
4. Verifying the message using the public key.

Some issues remain:

1. Retrieving the signing certificate every time we recieve a bounce
message is rather dumb. This is hard though because we can't just cache
a certificate without raising security issues.
2. Retrieving the signing certificate is done from any domain. This
could be probematic because anyone could craft a bounce message and sign
it using their own certificate. Amazon's documentation doesn't mention
anything about trusted domains.
3. We should do better error handling surrounding the verification
process. We should be able to handle errors loading the certificate or
verifying the signature.
Added logging and better error handling.
Added support for UnsubscribeConfirmation.
Only get the signing certificate from trusted urls

Added an AWS_SNS_BOUNCE_CERT_TRUSTED_DOMAINS setting which contains
a list of domains which can be trusted when receiving the signing
certificate for bounce messages.
Only trust https certificate urls.