Preserve error messages from Readable instances.

The current implementation uses 'fromBS' within the Maybe monad whose implementation of 'fail' discards all error messages, leaving always the much less helpful "no read". This change uses 'fromBS' within a specialized Either monad that preserves the error messages and behaves otherwise identically.