fix: make ThreadPoolExecutor a class var (#461)

diff --git a/google/auth/transport/grpc.py b/google/auth/transport/grpc.py
index ca38739..5ce6b2b 100644
--- a/google/auth/transport/grpc.py
+++ b/google/auth/transport/grpc.py
@@ -51,6 +51,15 @@
             object used to refresh credentials as needed.
     """
 
+    # Python 2.7 has no default for max_workers.
+    # In Python >= 3.5, ThreadPoolExecutor defaults to the
+    # number of processors on the machine, multiplied by 5.
+    if six.PY2:  # pragma: NO COVER
+        max_workers = 5
+    else:
+        max_workers = None
+    _AUTH_THREAD_POOL = futures.ThreadPoolExecutor(max_workers=max_workers)
+
     def __init__(self, credentials, request):
         # pylint: disable=no-value-for-parameter
         # pylint doesn't realize that the super method takes no arguments
@@ -58,7 +67,6 @@
         super(AuthMetadataPlugin, self).__init__()
         self._credentials = credentials
         self._request = request
-        self._pool = futures.ThreadPoolExecutor(max_workers=1)
 
     def _get_authorization_headers(self, context):
         """Gets the authorization headers for a request.
@@ -89,12 +97,9 @@
             callback (grpc.AuthMetadataPluginCallback): The callback that will
                 be invoked to pass in the authorization metadata.
         """
-        future = self._pool.submit(self._get_authorization_headers, context)
+        future = self._AUTH_THREAD_POOL.submit(self._get_authorization_headers, context)
         future.add_done_callback(self._callback_wrapper(callback))
 
-    def __del__(self):
-        self._pool.shutdown(wait=False)
-
 
 def secure_authorized_channel(
     credentials,