Added higher-level Signal class

It is an Event subclass, can be waited on using first and will catch
signals that were fired even when the current loop isn't explicitly
waiting on them.