add hammer tests; refactor to work around hammer.js weird touch events which never call .off()