Python: Allow to create a context using the default backend

Signed-off-by: Paul Cercueil <paul.cercueil@analog.com>
Python: Keep references to parent objects

This avoids segmentation faults in libiio that occur when a Device or
Buffer object is accessed while the Context object has been
garbage-collected.

Signed-off-by: Paul Cercueil <paul.cercueil@analog.com>
Python: Move Device.read/write to Buffer.read/write

Those functions are used to extract raw data from the buffer. It makes
more sense to have them available from the Buffer object rather than the
Device object.

Signed-off-by: Paul Cercueil <paul.cercueil@analog.com>