Update typedargs to always throw only MoMoException subclasses

We should standardize the exceptions that API routines throw so
that callers know what to expect and what means what.
Change exceptions to log strings correctly

Previously would log a tuple with one string inside
Add asynchronous file reading module

It's surprisingly hard to read from a pipe asynchronously in python
in a cross-platform way.  select() and poll() do not work on Windows
when given a pipe or file object.  The only way that seems to work
on all platforms is spinning up a dedicated thread to block reading
the file and then communicate with that thread using a threadsafe
Queue.

This is not efficient for large reading but is fine for reading a
few bytes.  This is needed for safe subprocess communication with
external simulator programs.
Update sim30 module to use asyncio for reading from sim30 program.
This is to be able to test when the simulator is successfully
running code and when not.  Reads will timeout when it is running
code since it seems to be single threaded.