scope-independent AngularJS observer service