Only allocate in the empty case
Remove extra Vector
Remove String allocations.
Return a borrowed slice for edges()
Shuffle the api a bit.