Rewrite common file ignoring logic to look at app.yaml's skip_files directive

Summary:
This turned out to be a bit easier than we'd hoped because the appserver has
a completely separate loop for detecting changes in yaml files that, as far as
I could tell by inspecting the code and sticking in logging statements, is
always called in a single thread. So whenever that code re-parses app.yaml, I
stick the skip_files regular expression into a global in watcher_common.

watcher_common then uses that skip_files regexp, and another one representing
the old lists of ignored directories, prefixes, and suffixes, within a new
function called ignore_path(). ignore_path() never ignores a top-level yaml
file; this is not strictly necessary because of the aforementioned separate
configuration file change detection routine, but it ensures that we'll always
restart the server when there is a configuration change, which we probably
always want to do anyway. ignore_path() also looks at every component of the
path in question when matching against the skip_files regexp because a
directory in skip_files, e.g. "^datastore$", is supposed to match everything
within it, e.g. "datastore/current.sqlite".

I made the mtime, inotify, and fsevents file watchers use this new
ignore_path(). The win32 file watcher is most likely broken so I added a TODO
to remove it from frankenserver. We don't support developing on Windows anyway.

Test Plan:
I tested the mtime and fsevents file watchers (but not the inotify one).

Tested that modifying these paths (among others) caused a restart:
    - app.yaml
    - main.py
    - content/
    - content/models.py

Tested that modifying these paths (among others) did not cause a restart:
    - datastore/
    - datastore/current.sqlite
    - Makefile
    - main.pyc
    - .git/
    - .git/foo
    - .#foo

Reviewers: csilvers

Reviewed By: csilvers

Differential Revision: http://phabricator.khanacademy.org/D9172