Fix style buttons' behavior when selecting the two positions around an annotation

This patch makes the selection info caching logic also save the information for selections which contain no text elements, i.e. of the kind in #560. This gets rid of the annoying all-buttons-activated behavior.

Next, for sensible editing, direct text styling is disabled for such selections, while direct paragraph styling is left enabled.

The widgets are accordingly subscribed to these states.
The problem is, returning a complex obj is already completely inconsistent with the other controllers. In a language with static+strong typing this wouldn't be an issue, but JS will make it almost impossible to discover the accidental mis-use of this function (e.g., a naive ``if (dfc.isEnabled()) {...}``).

I suspect more of the controllers will move to the new object format over time. Having two clear patterns is better than 1 ambiguous one imo.