Implement non-blocking interface

Note that this breaks compatibility in `SerialPortSettings` due to
transition to `blocking` field. This warrants a large version bump.

There should also be some updating of the documentation to clarify the behavior of non-blocking reads and writes, but I'll wait until we agree this is the correct approach before doing this.