Add support for per-file preprocessing

PR for #3 for initial review

I made the preprocess function the final argument, which avoids breaking the API, but if you'd rather keep the callback as the last arg I can change that. I also couldn't get a "this" ref, so I just stuck it on the `Parser` object directly. The only other difference from what you suggested is that the path is passed into the function as the first arg. We need that info for our purposes, and it is reminiscent of a Browserify transform.

Thoughts?