This forces us to use an explicit hash class in a few place, but it is cleaner. remove utils::lower_bound and utils::upper_bound, which were not used.
this one basically shows that the stl is is a good as our "branch less" versions. this is because clang generate branchless code in the end.