support observable view models at both the root and child context level

This is a major part of #321, but can be implemented separately. Depends on #483 and #484.