platform2: Enforce virtual destructors on base classes

There have been a number of memory leak issues due to absence of
virtual destructors on base classes. Swept through the following targets:
buffet, libchromeos, webserver.

For every class defined, I did one of the following three things:

1. If the class is not meant to be derived from, marked it as 'final'.
2. If classes derived from a particular base class are not meant to be
   deleted through the base class, marked the base class's destructor
   as 'protected'.
3. Otherwise made the base class's destructor virtual.

BUG=None
TEST=`FEATURES=test emerge-link libchromeos webserver buffet`

Change-Id: I4d909399896d025c39980c9546b79b145614fc47
Reviewed-on: https://chromium-review.googlesource.com/273000
Trybot-Ready: Alex Vakulenko <avakulenko@chromium.org>
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/commands/command_definition.h b/buffet/commands/command_definition.h
index 3328a94..a5e2916 100644
--- a/buffet/commands/command_definition.h
+++ b/buffet/commands/command_definition.h
@@ -19,7 +19,7 @@
 // constraints. See comments for CommandDefinitions::LoadCommands for the
 // detailed description of what command categories are and what they are used
 // for.
-class CommandDefinition {
+class CommandDefinition final {
  public:
   struct Visibility {
     Visibility() = default;
diff --git a/buffet/commands/command_dictionary.h b/buffet/commands/command_dictionary.h
index 7668fba..97ab596 100644
--- a/buffet/commands/command_dictionary.h
+++ b/buffet/commands/command_dictionary.h
@@ -30,7 +30,7 @@
 // the map) is a compound name in a form of "package_name.command_name",
 // where "package_name" is a name of command package such as "base", "printers",
 // and others. So the full command name could be "base.reboot", for example.
-class CommandDictionary {
+class CommandDictionary final {
  public:
   CommandDictionary() = default;
 
diff --git a/buffet/commands/command_queue.h b/buffet/commands/command_queue.h
index 9178c8a..db6707c 100644
--- a/buffet/commands/command_queue.h
+++ b/buffet/commands/command_queue.h
@@ -66,7 +66,7 @@
   // Returns current time.
   base::Time Now() const;
 
-  // Overrided value to be returned from Now().
+  // Overridden value to be returned from Now().
   base::Time test_now_;
 
   // ID-to-CommandInstance map.
diff --git a/buffet/commands/dbus_command_dispatcher.h b/buffet/commands/dbus_command_dispatcher.h
index ab63a6c..e9f5003 100644
--- a/buffet/commands/dbus_command_dispatcher.h
+++ b/buffet/commands/dbus_command_dispatcher.h
@@ -28,7 +28,7 @@
 // update the command handling progress. Once command is handled,
 // DBusCommandProxy::Done() is called and the command is removed from the
 // command queue and D-Bus ExportedObjectManager.
-class DBusCommandDispacher {
+class DBusCommandDispacher final {
  public:
   explicit DBusCommandDispacher(const base::WeakPtr<
       chromeos::dbus_utils::ExportedObjectManager>& object_manager);
diff --git a/buffet/commands/schema_utils.h b/buffet/commands/schema_utils.h
index 625b854..59e3b39 100644
--- a/buffet/commands/schema_utils.h
+++ b/buffet/commands/schema_utils.h
@@ -43,7 +43,7 @@
 // is inherited or overridden, while |is_inherited| can be used to identify
 // if the attribute was inherited (true) or overridden (false).
 template<typename T>
-class InheritableAttribute {
+class InheritableAttribute final {
  public:
   InheritableAttribute() = default;
   explicit InheritableAttribute(T val)