webdav: test that Dir and memFS semantics agree.

Fix Dir.OpenFile to not return a nil *os.File (a concrete type) when it
should return a nil webdav.File (an interface type).

Fix memFS.RemoveAll to return nil error instead of os.ErrNotExist when
removing a non-existant file, matching os.RemoveAll's documented
semantics.

Change-Id: I84dfb404aca30e084cd46d6bdc94655aab718bc0
Reviewed-on: https://go-review.googlesource.com/2932
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/webdav/file.go b/webdav/file.go
index 782f03d..006bdcd 100644
--- a/webdav/file.go
+++ b/webdav/file.go
@@ -69,7 +69,11 @@
 	if name = d.resolve(name); name == "" {
 		return nil, os.ErrNotExist
 	}
-	return os.OpenFile(name, flag, perm)
+	f, err := os.OpenFile(name, flag, perm)
+	if err != nil {
+		return nil, err
+	}
+	return f, nil
 }
 
 func (d Dir) RemoveAll(name string) error {
@@ -267,9 +271,6 @@
 		if frag == "" {
 			return os.ErrInvalid
 		}
-		if _, ok := dir.children[frag]; !ok {
-			return os.ErrNotExist
-		}
 		delete(dir.children, frag)
 		return nil
 	})