Generic filters2

I think I hit on the major points and recommendations I've gotten (but yell at me if I forgot any!). I changed it so that the filtering is done updating the original dict as much as possible and I made it clear in the documentation that that's the idea. I added back in the _done_check() method's functionality that I previously removed. I also wrote a couple tests.

So this is probably (at least from my perspective) pretty close to being mergable. Let me know what you guys think!
Can you change the default to `None`?  When you use a default of a list (even an empty list), then the list is bound to the function for all future function calls.  If the list is ever modified during any call, then the list will be modified for all future calls of the function!  This is a bad feature of Python.  A similar thing happens whenever you use any non-primitive default (e.g. a `dict` or `set`).  Default values of integers, strings, constants, doubles are safe.  The best thing to do is use a default of `None` and then have (as the first line of the function):

```python
filters = [] if filters is None else filters
```