correctness fixes for nested structs and setting list elements

Hi Albert,
I found and fixed some fairly critical bugs in the go-capnproto implementation. Just opening this pull request in case you want them. 

The 825ab78 and the f0d8698 patches specifically are very important to make PointerList.Set() work, and for embedding structs within other structs where the offsets can be negative.  The others are perhaps less critical.

Best,
Jason