Refactor selection

Since it currently doesn't, y'know, work, for `TextBlock`s.

Of course, so far this doesn't actually fix selection for `TextBlock`s, except for #141, so.