Fix for Issue 373

Fixes #377

I think this takes care of the minimum requirements to fix this issue. I added some very basic unit tests because I noticed they were missing.

One more suggestion though: `Unmarshaller.unmarshal[T]` doesn't actually unmarshal anything. It is basically an alias for `implicitly[Unmarshaller[T]]` and the implicit argument list makes it impossible to call it like this:

    val unmarshalled = unmarshal[String](HttpEntity("a string"))

I would suggest renaming it to `unmarshaller[T]` to make it more clear what it actually does. Then we can add `def unmarshal[T: Unmarshaller](entity: HttpEntity): Deserialized[T]` to have parity with `unmarshalUnsafe` again. What do you think?