o added support for self-loops
o fixed clear-graph bug:
  can't call @canvas.off() while processing event, so rely on explicit
  nodeList rather than event-handling for removing nodes on clear
o changed compactGraph to rely on explicit nodeList as well for consistency