Add InputStream/OutputStream and many more changes

- remove some irrelevant fields from api/device dicts

- replace device dicts with plain device IDs in Stream constructor
  and add more arguments (as replacement for dicts)

- change apis() to hostapi_info() and devices() to device_info().
  Both take an optional device ID.

- change stream flags to named parameters

- abort stream callback on error
  If an exception is raised within the callback or if the wrong type is
  returned, the stream is aborted instead of being called all over again.
  Exceptions are not propagated to the main thread, instead, they are
  printed to stderr.
  See https://cffi.readthedocs.org/en/latest/#callbacks

- add 'default' object to module namespace
  This object hold default values for streams and allows users to
  override these default values.

... and several more things.
WIP