Better fnmatch(), supporting `**` like `.gitignore`, in Rust