tests: don't check copyright of files ignored by git

Files in .gitignore are not part of the repository so we don't need to
check the copyright in them.  Replicate what "git ls-files" does by
parsing .gitignore files in every directory and ignoring files,
directories and globs listed there for all subdirectories.
diff --git a/tests/test_copyright.py b/tests/test_copyright.py
index 8cf31d3..b79a77d 100644
--- a/tests/test_copyright.py
+++ b/tests/test_copyright.py
@@ -15,6 +15,7 @@
 
 
 from datetime import date
+from glob import glob
 import os
 import re
 import unittest
@@ -61,10 +62,34 @@
 
         tests_dir = os.path.dirname(os.path.abspath(__file__))
         base_dir = os.path.dirname(tests_dir)
+        patterns_to_ignore = {}
 
         for root, dirs, files in os.walk(base_dir):
+            if ".gitignore" in files:
+                fname = os.path.join(root, ".gitignore")
+                with open(fname) as fin:
+                    lines = fin.readlines()
+
+            patterns_to_ignore[root] = [l.strip() for l in lines]
+
+            files_to_ignore = []
+            for directory, patterns in patterns_to_ignore.iteritems():
+                if root.startswith(directory):
+                    for pat in patterns:
+                        pat = os.path.join(root, pat)
+                        files_to_ignore.extend(glob(pat))
+
+            for dirname in dirs:
+                full_dirname = os.path.join(root, dirname)
+                if full_dirname in files_to_ignore:
+                    dirs.remove(dirname)
+
+
             for fname in files:
                 fname = os.path.join(root, fname)
+                if fname in files_to_ignore:
+                    continue
+
                 extension = os.path.splitext(fname)[1]
                 if extension in [".py", ".js", ".css"]:
                     if not copyright_is_valid(fname):