support compound objects; pass bytes_remaining
actually throw on de-serializing error