Add readDir primop

supersedes #235
That's why I mentioned the fallback code in `findRoots()`.