Cache Control and Conditional Get

Based on https://github.com/lotus/controller/pull/14

A lot of code improvements, more tests and conditional get.

cc: @jodosha, @karlfreeman 
please put those `require` at the top of the file :smile: