Improved marshaling of interface "Marshaler"

The Marshal did not work for pointers to interface Marshaller. I added the test cases, which had experienced this problem.
If I understand @phillipCouto correctly, you this type check (`if v, ok := value.(Marshaler); ok`) on L46 and L51.