message: [FC] Add cancel() to scoped_exit
  Allow scoped_exit objects to be canceled so they do not call their
  callbacks when destroyed.
diff: @@ -9,12 +9,15 @@ namespace fc {
  scoped_exit( C&& c ):callback( std::forward<C>(c) ){}
  scoped_exit( scoped_exit&& mv ):callback( std::move( mv.callback ) ){}
  + void cancel() { canceled = true; }
  +
  ~scoped_exit() {
  + if (!canceled)
  try { callback(); } catch( ... ) {}
  }
  scoped_exit& operator = ( scoped_exit&& mv ) {
  - callback = std::move(mv);
  + callback = std::move(mv.callback);
  return *this;
  }
  private:
  @@ -22,6 +25,7 @@ namespace fc {
  scoped_exit& operator=( const scoped_exit& );
  Callback callback;
  + bool canceled = false;
  };
  template<typename Callback>
  