implemented lazy computed observables

An eager observable computes its value as soon as possible, whereas a
lazy (non-eager) observable computes its value only when necessary. A
computed observable can be made lazy by passing it the option `eager:
false` when creating it. A subscription can likewise be made either lazy
or eager (eager by default), such that a computed observable evaluates
eagerly whenever it has one or more eager subscriptions. Likewise, an
eager computed observable subscribes eagerly to its dependencies.
Eagerness propagates, so that a computed observable becomes temporarily
eager when it has any eager subscriptions, and it thus makes its own
subscriptions temporarily eager, and so on. Since UI computed
observables are always eager, this causes any computed observable which
generates visible output to be eagerly evaluated for as long as the UI
continues to depend on it.