Initial commit of trigger support

Singularity is going to use 'triggers' as events/messages that get
passed around. These are defined as having three pieces of data: the
trigger (a string), the scope (an enum), and the payload (a potentially
nested dictionary).

The scope is one of LOCAL (only the local, handling agent), REGIONAL
(all agents connected to a broker -- this is not yet implemented
functionality), or GLOBAL (every agent should see this event, also not
implemented yet).

The goal of having triggers is to use them as the primary method of
causing chainable behaviors. I.e., if you want to monitor free RAM and
it gets low, a LowRam trigger might be fired with LOCAL scope. You can
then have things on the local system that subscribe to this trigger and
cause things to happen, such as restarting software, paging an on-call,
etc.