read()/write() overhaul

Replace ffi.new() with np.empty() and np.ascontiguousarray()

Remove dicts for readers/writers

read():
* reserve only as much memory as needed (if 'frames' is too large)
* check return value of sf_readf_*()

write():
* avoid copy if data has already the correct memory layout
* check return value of sf_writef_*()
* don't return the number of written frames!
  This is for symmetry with read() and it's redundant information anyway
Add arguments always_2d, out and fill_value

See also #16

If less frames are left in the file than would fit into out and
fill_value=None, a smaller view into out is returned that contains only
the valid frames.
Move dtype check

With this, one line gets obsolete and can be removed.
Add open(), read() and write() functions

This is the combination of a few commits from #18.
See also #14.