Add unified recursive or explicit watch and unwatch support