Cleanup autocomplete.js

Consistently use .bind(this) instead of that = this
Fix bug and clarify async autocomplete result gathering

@SamyPesse’s “left: total - (i + 1)” was flawed because it only would
work if all completers were async