Round-tripping objects through the FFI

@tqchen Thank you for providing the rationale here. I have so much to learn.

I don’t quite understand yet why serialization would necessarily preclude you from having a 1-1 relation between C++ and Python objects – deserializing would create a new C++ object so I would not expect that you get back the same Python object. Now I can see how we would not serialize all stuff people attach to it, but I think the much more modest goal of having a better correspondence at runtime would be feasible by linking the Python object to the C++ object if the Python object exists and if it does not setting up the link when we first create a Python object from it.