improved sim structured

Moved evaluation of expressions into separate classes that make use of
polymorphism to quickly evaluate a logical function on a set of signals. Added
a dependency tracking mechanism that allows a signal to inform other objects
about it having changed. This is currently used to trigger a re-evaluation of
signal assignments. May later also be used to trigger the execution of
processes (storage, and others).