Selection and highlighting

Closes #106
Closes #105
Closes #97
Closes #96
Closes #93
Closes #54