fix benchs (would not build);
benchmark for type inference
substitutions as hashtables are actually better, but expose a  val empty : unit -> subst
that makes changing the implementation easy