Exclude should be O(n)

Here's the pull request ref issue #42 - I wound up cheaping out and just using an object as a dictionary to implement the exclusion.  I don't know if that'll solve the problem sterpe was seeing in #38, so it would be good to have feedback from there.

I also factored the exclusion routine (and gave it a horrible name) and wrote some tests against it that use a mock grunt object -- the mock object's expand() function just returns its argument unless there's a matching key in its overrides, which allows the tests to simulate globbing without having to hit the filesystem.  Kinda ugly but it works in this case.