Clean up how the `read*()` methods are implemented.
Clean up how the `read*()` methods are implemented.

This adds parameter checking and moves the generic version of the
`read()` call into the internal `State` class.

Medium/pipette