Add our own custom XML marshaling code.

In order to get around golang/go#5452, this adds our own re-implementation of `encoding/xml` struct handling which doesn't elide pointers to zero values.

Not awesome, but it works.

Closes #32.