Revert "move Deferred to public interface for cancelation"

This reverts commit 17f6201d1c6f72de59813ea92a06aceafedc9c41.
diff --git a/c++/src/kj/common.h b/c++/src/kj/common.h
index a450520..de42cfb 100644
--- a/c++/src/kj/common.h
+++ b/c++/src/kj/common.h
@@ -1860,38 +1860,33 @@
 // =======================================================================================
 // Defer
 
-class Deferred {
-public:
-  inline void cancel() { canceled = true; }
-
-protected:
-  inline Deferred(): canceled{false} {}
-  bool canceled;
-};
-
 namespace _ {  // private
 
 template <typename Func>
-class DeferredImpl final: Deferred {
+class Deferred {
 public:
-  inline DeferredImpl(Func&& func): func(kj::fwd<Func>(func)) {}
-  inline ~DeferredImpl() noexcept(false) { if (!canceled) func(); }
-  KJ_DISALLOW_COPY(DeferredImpl);
+  inline Deferred(Func&& func): func(kj::fwd<Func>(func)), canceled(false) {}
+  inline ~Deferred() noexcept(false) { if (!canceled) func(); }
+  KJ_DISALLOW_COPY(Deferred);
 
   // This move constructor is usually optimized away by the compiler.
-  inline DeferredImpl(DeferredImpl&& other): func(kj::fwd<Func>(other.func)) {
-    canceled = other.canceled;
+  inline Deferred(Deferred&& other): func(kj::fwd<Func>(other.func)), canceled(other.canceled) {
     other.canceled = true;
   }
 
+  void cancel() {
+    canceled = true;
+  }
+
 private:
   Func func;
+  bool canceled;
 };
 
 }  // namespace _ (private)
 
 template <typename Func>
-_::DeferredImpl<Func> defer(Func&& func) {
+_::Deferred<Func> defer(Func&& func) {
   // Returns an object which will invoke the given functor in its destructor.  The object is not
   // copyable but is movable with the semantics you'd expect.  Since the return type is private,
   // you need to assign to an `auto` variable.
@@ -1899,7 +1894,7 @@
   // The KJ_DEFER macro provides slightly more convenient syntax for the common case where you
   // want some code to run at current scope exit.
 
-  return _::DeferredImpl<Func>(kj::fwd<Func>(func));
+  return _::Deferred<Func>(kj::fwd<Func>(func));
 }
 
 #define KJ_DEFER(code) auto KJ_UNIQUE_NAME(_kjDefer) = ::kj::defer([&](){code;})