go: make sure we test both float and double types
go: handle interfaces when packing by recursing until we hit a concrete type
go: more complex nested types
go: edge cases for integer encodings