Using your `for j in 1 .. paths.high()` is _much_ faster than my `for s in paths[1 .. ^1]`, but for me my `foldl` is much faster than your `maxLen`. (My test data isn't great though, a dozen calls, eleven with common prefixes, repeated 100K times.)
Maybe a common prefix algorithm should be in the std. lib., perhaps with one version that is "raw" and another which does prefixes only at a given separator?