Allow some I/O errors to be ignored when syncing
Print indexing progress reports in logging.DEBUG
TODO list updates
Not compiling the regex on every invocation looks to be faster

Observed timings:

~$ for x in 1 10 100 1000 10000 100000; do python -m timeit -n $x -s 'import re' 're.match("[0-9]{3}-[0-9]{3}-[0-9]{4}", "123-123-1234")'; done
1 loops, best of 3: 2.86 usec per loop
10 loops, best of 3: 3.41 usec per loop
100 loops, best of 3: 3.25 usec per loop
1000 loops, best of 3: 1.98 usec per loop
10000 loops, best of 3: 1.89 usec per loop
100000 loops, best of 3: 1.94 usec per loop
~$ for x in 1 10 100 1000 10000 100000; do python -m timeit -n $x -s 'import re; r = re.compile("[0-9]{3}-[0-9]{3}-[0-9]{4}")' 'r.match("123-123-1234")'; done
1 loops, best of 3: 0.954 usec per loop
10 loops, best of 3: 1.12 usec per loop
100 loops, best of 3: 0.82 usec per loop
1000 loops, best of 3: 0.808 usec per loop
10000 loops, best of 3: 0.537 usec per loop
100000 loops, best of 3: 0.547 usec per loop
~$ for x in 1 10 100 1000 10000 100000; do python -m timeit -n $x -s 'import re2 as re' 're.match("[0-9]{3}-[0-9]{3}-[0-9]{4}", "123-123-1234")'; done
1 loops, best of 3: 4.05 usec per loop
10 loops, best of 3: 2.72 usec per loop
100 loops, best of 3: 3.59 usec per loop
1000 loops, best of 3: 2.56 usec per loop
10000 loops, best of 3: 2.45 usec per loop
100000 loops, best of 3: 2.62 usec per loop
~$ for x in 1 10 100 1000 10000 100000; do python -m timeit -n $x -s 'import re2 as re; r = re.compile("[0-9]{3}-[0-9]{3}-[0-9]{4}")' 'r.match("123-123-1234")'; done
1 loops, best of 3: 2.86 usec per loop
10 loops, best of 3: 1.81 usec per loop
100 loops, best of 3: 1.68 usec per loop
1000 loops, best of 3: 1.92 usec per loop
10000 loops, best of 3: 1.5 usec per loop
100000 loops, best of 3: 1.63 usec per loop
~$ for x in 1 10 100 1000 10000 100000; do python -m timeit -n $x -s 'import re;' 'r = re.compile("[0-9]{3}-[0-9]{3}-[0-9]{4}"); r.match("123-123-1234")'; done
1 loops, best of 3: 4.05 usec per loop
10 loops, best of 3: 2 usec per loop
100 loops, best of 3: 2.85 usec per loop
1000 loops, best of 3: 2.09 usec per loop
10000 loops, best of 3: 1.86 usec per loop
100000 loops, best of 3: 1.98 usec per loop
~$ for x in 1 10 100 1000 10000 100000; do python -m timeit -n $x -s 'import re2 as re;' 'r = re.compile("[0-9]{3}-[0-9]{3}-[0-9]{4}"); r.match("123-123-1234")'; done
1 loops, best of 3: 4.05 usec per loop
10 loops, best of 3: 4.79 usec per loop
100 loops, best of 3: 2.52 usec per loop
1000 loops, best of 3: 2.94 usec per loop
10000 loops, best of 3: 2.56 usec per loop
100000 loops, best of 3: 2.37 usec per loop
Be much more verbose with --logging=DEBUG
Process exclusions at walk-time instead of afterwards.

This lets us avoid stat()ing files that we're going to exclude anyway, at the
expensive of changing exclusions semantics a bit: we will now also ignore any
files where any *parent directory* matches any of the exclusion patterns in
addition to the filename.
Don't call basename() on files where we already know the basename
Don't process exclusions if we don't have any
Compile exclusion regexes before sync walk
Allow multiple exclusions on the command line at once
Try to compile user-regexes before declaring them valid
TODO updates
Move searching functions into their own file (ftssearch.py)
Add a test for --re searches
Make our Cursor class emulate the sqlite cursor underneath it, to add a place to quickly shim in EXPLAIN
Speed up large syncs a bit by creating an index on one of the temporary tables
Basic performance tests
gitignore enhancements
speed up large syncs by using views instead of temporary tables