Optimize recursedir

Makes `recursedir()` faster

`pattern2re()` returned a regex that matches the requested paths. Now, it also returns the start directory from which to search (so that a pattern of `'some/directory/dir*/*.txt'` can simply list `'some/directory'` instead of recursing from top), and an intermediate pattern so that `'some/directory/dir1'` will be considered but `'some/directory/impossible'` won't be listed (we know that no path under it will match the full pattern).