stmhal, uart: Make timeout/timeout_char init params only.

It's more useful to set a timeout for all send/recv calls on
initialisation of the UART, rather than specifying these parameters each
time send/recv is called.  This drastically simplifies the send/recv
methods since they don't need to parse the arguments anymore.
stmhal, uart: Overhaul UART to act like a stream object.

send/recv are converted to write/read, and the stream protocol is used
to implement read, readall, readline, write and iteration.  readchar and
writechar are also added to the UART, as well as readinto.

This unifies the UART with other stream objects, makes it more powerful,
reduces code size, and retains all functionality, including 9-bit
read/writes.