Add action manager transaction storage

This PR adds a transaction storage, a transaction registration. It also adds code which let's you trigger transactions through events.
Targets #322.
You are doing a initialization of the bottom value in the else case here, I _guess_ (I don't know) this is because the bottom of a stack must be NIL to be able to iterate over the stack values inside a function or whatever and stopping when hitting NIL.

But you already added a NIL value on the stack before the whole if-else construct, so you're basically have two NIL values on the stack after the else branch here.

My question is: It is necessary to have two NIL values on the stack, wouldn't be one enough? Or would this break other parts of the code if one NIL value would be on the stack when there is no context around here?