DM: don't leak the null canvas in NullSink.

Also make NullSink a real boy: declared among the other Sinks, impl in .cpp.

BUG=skia:

Review URL: https://codereview.chromium.org/922293003
diff --git a/dm/DMSrcSink.h b/dm/DMSrcSink.h
index 48c572b..4c15c92 100644
--- a/dm/DMSrcSink.h
+++ b/dm/DMSrcSink.h
@@ -8,7 +8,6 @@
 #include "SkCanvas.h"
 #include "SkData.h"
 #include "SkGPipe.h"
-#include "SkNullCanvas.h"
 #include "SkPicture.h"
 #include "gm.h"
 
@@ -86,6 +85,16 @@
 
 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 
+class NullSink : public Sink {
+public:
+    NullSink() {}
+
+    Error draw(const Src& src, SkBitmap*, SkWStream*, SkString*) const SK_OVERRIDE;
+    int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; }
+    const char* fileExtension() const SK_OVERRIDE { return ""; }
+};
+
+
 class GPUSink : public Sink {
 public:
     GPUSink(GrContextFactory::GLContextType, GrGLStandard, int samples, bool dfText, bool threaded);
@@ -189,15 +198,6 @@
     SkAutoTDelete<Sink>         fSink;
 };
 
-class NullSink : public Sink {
-public:
-    Error draw(const Src& src, SkBitmap*, SkWStream*, SkString*) const SK_OVERRIDE {
-        return src.draw(SkCreateNullCanvas());
-    }
-    int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; }
-    const char* fileExtension() const SK_OVERRIDE { return ""; }
-};
-
 }  // namespace DM
 
 #endif//DMSrcSink_DEFINED