Rewrote containsKey for recursive data structure

Storing two Sets<K> and <V> (of keys and values) as global variables
creates dependencies that are incredibly difficult to maintain and
modify in add/remove methods of recursive ADTs.

I have modified containsKey to do a recursive search of all the graph’s
nodes and their children instead.