refactoring to reduce usages of mutable state

so the original goal of this refactoring was to minimize the usage of mutable state in REScala
without changing much of the interface.

what this includes by now is:
* no use of mutable state except from methods in the same class
* removed redundancy in the implementation of signals and events
  * some common patterns have been extracted into superclasses
  * each individual reactive has a lot less to worry about making (dependency management, level, etc.)
* support for dynamic dependent reactives is improved but still not completely correct. some tests for failures are included.
* lots of small bugfixes and improvements along the way

this should mostly be a true refactoring, i.e. everything that worked before should still work
(there are some things that have been removed, but those were probably internal)
tests do still work with only minor modifications (the changed lines inside the testsuite are moslty a renaming from dependents.size to dependentsCount to remove direct access to the var, as well as whitespace changes for one test)