allow Message.Data to be of any marshallable type

Previously `Message.Data` field was only taking `map[string][string]` which is very limited.

Values of the `Data` map could be any JSON object according to GCM documentation. So I changed this type to `map[string]interface{}` and tested it with complex types e.g.