Cleaned up repulsion a little, it would be nice to have a function to get the minimum location and max location of where a node has been drawn, but the descent from child to parent makes that harder.  There could be pre-draw and post-draw type functions to handle it though.