translate Paths to valid dot-separated MongoDB collection names (Fixes #139)

The problem is as follows:

1. If it's an error to `ls` from a non-existing path, then `Task` should fail, because it encapsulates the effect of failure.
2. If it's not an error to `ls` from a non-existing path (which may be the right default, because there are no means to create paths on some backends such as MongoDB), then `ls`ing on a non-existing path should return no children, i.e. the empty list.

So whether it's an error or not an error to `ls` on a non-existing path, it really doesn't make a whole lot of sense to add another monad in the stack -- it will just complicate handling of the return value (e.g. your code must deal with `Task` failure as well as `None`, or your code must treat `None` as equivalent to `Some(Nil)` -- the latter is what I expect to happen in most cases).