better detection of cycle set, by pruning leaf branches.

Since we mostly work graphs that are mostly tree-like, this should reduce the set considerably.
Example for ros-base groovy with artificialy cycle between genmsg and gencpp:

Circular dependency in subset of packages, before:

  actionlib, actionlib_msgs, driver_base, dynamic_reconfigure, gencpp,
  genlisp, genmsg, genpy, geometry_msgs, message_filters, nav_msgs, rosbag,
  roscpp, roscpp_tutorials, rosgraph_msgs, rosnode, rosout, rospy_tutorials,
  rostopic, roswtf, sensor_msgs, std_msgs, std_srvs, stereo_msgs,
  topic_tools, trajectory_msgs, turtlesim, visualization_msgs

After:

Circular dependency in subset of packages:

  gencpp, genmsg