Tidy up collections

* modify circulators to handle naked faces or vertices
* refactor methods to add and find halfedge into halfedge list
* lots of tidying up
* add more tests