Make Encode() work on map[string]interface{}

I was trying to read, modify, and then write a plist, something like this:
```go
var data map[string]interface{}
xmlplist.Unmarshal(buf, &data)

// Modify data here ...

newBuf, _ := xmlplist.Marshal(data)
```
But I got an error like this:
```
data_test.go:67: plist: cannot encode interface
```
I forked the repo to make it use type assertions in some places rather than reflection to make this usage work. I also added unit tests (I put them in `common_test.go` because it was testing both encoding and decoding rather than both) to reproduce the error.