Make ForwardingDirectory generic. (#74)

Due to an upcoming change in Dart 2.0
(, it will no longer be
allowed for a class to implement the same generic interface in
different ways.  (E.g. a class cannot implement/extend/mixin both
A<int> and A<String>).

This causes problems with _LocalDirectory.  It extends
_LocalFileSystemEntity<_LocalDirectory, Directory>, which extends
ForwardingFileSystemEntity<_LocalDirectory, Directory>, but it mixes
in ForwardingDirectory, which extends
ForwardingFileSystemEntity<Directory, io.Directory>.

The solution is to make ForwardingDirectory a generic mixin, with
ForwardingDirectory<T> extending ForwardingFileSystemEntity<T,
io.Directory>.  Type inference automatically fills in the type
argument T=_LocalDirectory at the site of the declaration of
diff --git a/lib/src/forwarding/forwarding_directory.dart b/lib/src/forwarding/forwarding_directory.dart
index 3c75a02..e49b9a7 100644
--- a/lib/src/forwarding/forwarding_directory.dart
+++ b/lib/src/forwarding/forwarding_directory.dart
@@ -5,11 +5,10 @@
 part of file.src.forwarding;
 /// A directory that forwards all methods and properties to a delegate.
-abstract class ForwardingDirectory
-    extends ForwardingFileSystemEntity<Directory, io.Directory>
-    implements Directory {
+abstract class ForwardingDirectory<T extends Directory>
+    extends ForwardingFileSystemEntity<T, io.Directory> implements Directory {
-  ForwardingDirectory wrap(io.Directory delegate) => wrapDirectory(delegate);
+  T wrap(io.Directory delegate) => wrapDirectory(delegate);
   Future<Directory> create({bool recursive: false}) async =>