Async

This pull request takes from #170 and cleans it up a bit. The primary change is that I removed enableCompression from the interface because I don't see a need to declare it there. If we add enableCompression, what else would we add there? It is a slippery slope.

It also negates #160 #161 which we should just close out anyway.

Comments before I merge it in? @dkocher @boxerab