source.py,plugin.py: Allow elements to have a cache directory

At present, only source plugins are allowed to have cache directories
but not elements. Move `get_mirror_directory()` method from Source()
to Plugin() so that elements could also benefit from having a cache, if
needed.
diff --git a/buildstream/plugin.py b/buildstream/plugin.py
index a65db4d..6b4dbb1 100644
--- a/buildstream/plugin.py
+++ b/buildstream/plugin.py
@@ -287,6 +287,19 @@
         """
         return self.__kind
 
+    def get_mirror_directory(self):
+        """Fetches the directory where this plugin should store things
+
+        Returns:
+           (str): The directory belonging to this plugin
+        """
+
+        # Create the directory if it doesnt exist
+        context = self._get_context()
+        directory = os.path.join(context.sourcedir, self.get_kind())
+        os.makedirs(directory, exist_ok=True)
+        return directory
+
     def node_items(self, node):
         """Iterate over a dictionary loaded from YAML
 
diff --git a/buildstream/source.py b/buildstream/source.py
index 6d56405..2ef9fb1 100644
--- a/buildstream/source.py
+++ b/buildstream/source.py
@@ -481,19 +481,6 @@
     #############################################################
     #                       Public Methods                      #
     #############################################################
-    def get_mirror_directory(self):
-        """Fetches the directory where this source should store things
-
-        Returns:
-           (str): The directory belonging to this source
-        """
-
-        # Create the directory if it doesnt exist
-        context = self._get_context()
-        directory = os.path.join(context.sourcedir, self.get_kind())
-        os.makedirs(directory, exist_ok=True)
-        return directory
-
     def translate_url(self, url, *, alias_override=None):
         """Translates the given url which may be specified with an alias
         into a fully qualified url.