rewrite on top of highland

not ready to merge until caolan/highland#104 is resolved (caolan/highland#106 would be nice as well)