Re-Structure

I've pulled out some of the stuff from the main file into smaller files that are hopefully a little easier to manage.

Matchers are in the matchers file, these create the regexps for matching against file paths and names. There are also tests, they could probably be improved.

Separated `File` and `Files` out.

Also instead of maintaining three arrays of matches and then sorting each one of them `Files` now implements the heap interface. This allows us to efficiently keep track of the n best matches. This should improve performance for queries that return a large number of matches.