Clean up rabbitpy.Message

- Break out some functionality in the constructor to stand alone methods
- Clean up order of operations in __init__
- Add some test coverage (more coming)
- Raises a KeyError on creation if an invalid property is passed in
- Cast different types of timestamp values to datetime.datetime
- Break out the invalid properties list to a standalone method
- Reorder methods to have private methods at the end