Fixed Edge#reverse to be more subclass friendly

Now it uses self.class.new instead of Edge.new
Added a length attribute to Edge