modified off function it takes multiple args and if all is passed as the first arg it removes all listeners