Big time work on reactive engine + unit tests

- Refactored all reactive classes
- Moved all methods from environment to context
- expression(), value(), observer() methods now have prefix "new_"
- expression() and value() are now decorators
- reactive values are now required to be initialized with a value (may
be changed?)
- added 7 unit tests from shiny testsuite
- added logging capability to reactive context
- fixed a humonguous amount of bugs with reactivity
- more careful handling of UndefinedKey
- context now tracks running observers/expressions so reflushing
doesn't happen if not needed
- fixed a bunch of reactive/non-reactive recursion edge cases
- updated app.py and both examples