fix($rootScope): allow $destroy of ancestor/self within watcher

First stab at this #5658 .

The `$parent` property of a scope maybe null in the case that it is destroyed within a watcher. Hence, just track the parents through a stack.

I'm aware that this fix isn't performant and creates a lot of work for the GC. However, it's a proof of concept of my take on this. It can be refactored to use only one array instead of re-instantiating new arrays. This is just a simple application of the typical DFS algorithm. 

I'll update this PR once I verify that this is an issue at all and this is a use case worth supporting.
Otherwise, if destroying a scope or its ancestor should *not* be done within its watcher, it must be documented somewhere as a big no-no.

Note: May also want to short-circuit watcher loop if scope is destroyed.