refactored _parse to run isinstance less.
I had shied away from this previously because I didn't want to tangle up `Node` objects with their SQL representations, but this has actually caused some pain when wanting to add new Node types (i.e. the `unknown` grossness). Maybe this is a good path forward, I certainly have been aware that the recent refactorings would hurt performance a bit, but figured it would be negligible since most time is spent in the DB anyways... but I always like fast.

Thank you very much for this work, I think it's a good start and I'll investigate a similar approach.
 Cool! :-) I really like peewee, I love how simple the whole thing is for library users, and only being one file, etc.  Thanks very much for your work on it.
 I did some profiling (ran the benchmark suite with cProfile). Here are some baseline results:

https://gist.github.com/coleifer/9da9e7683530342b7de2
 Closing this and have marked it as a to-do item.

I was importing some data, and found it running slower than I thought it should. I profiled, and found that the `_parse` function was taking the longest, and that `isinstance` was getting called 259579 times, which was taking a good chunk of it.  I've (very naively) refactored the `QueryCompiler._parse_node` function to call out to per-object methods (which for now is called `_parse_me`, but that's easily changed).

This reduces the calls to `isinstance` down to 97122, and shaves a 10% off my data import time.

Is this a line of optimising worth pursuing?
