Router

Trie implementation + tests
Router using it + tests
might be more explicit to have:
```
returnNode := commonChild.addPath(...)
n.SortChildren(indexChild)
return returnNode
```
Providing you find a better name than `returnNode`