Added asynchronous file and pipe support.

AsyncFile implements asynchronous interface for file-like objects,
for sockets and pipes. Notably, this is not for regular on-disk
files, as they are not "blockable" and pollers don't support event
handilng to indicate read/write events. This class implements
read, write and readline methods.

AsyncPipe implements asynchronous interface for pipes. It
wraps subprocess.Popen objects to provide read, write and
communicate methods. It can be used for a single pipe or connected
pipes.
MonitorException is now sent as a message.

MonitorException is now sent as a message to monitor, instead of
throwing exception. Handling exceptions is a bit cumbersome, whereas
processing messages is much simpler and cleaner. The monitor
can process the messages just as it would any other message; the
type of message can be checked to know if it is MonitorException
or some other message.

Added 'atexit' to AsynCoro so that functions can be registered
that will be executed after the scheduler has terminated.