test(watchgroup): add test to verify that filter implementation works correctly

My understanding of the algorithm for calling filters is that they should be 
implemented as a series of PureFunction calls, as they should produce output 
consistently, based on the initial input and other arguments.