Add error handling to Read() and ReadOne()

This is necessary so that users of this API can detect errors (e.g. No such device after unplugging a USB keyboard) and properly handle them. Currently, applications will just busy-loop in that situation.