refactor vote functions into Votable model, cleanup view listeners