Fix handling of DecodeError messages.

All the code that deals properly with handling DecodeError when creating
new Message objects expects to receive None if a message decode fails. A
previous refactor lost this functionality by putting the try block into
the object constructor, which you can't return a different value from. I
solve this by creating an alternate .create() constructor instead.