Move one-aggregate queries to the aggregate.

To get a feel for how this works out. The read model, predictably, is
a bit simpler because it now only cares for inter-aggregate queries,
which cuts down on the amount of information held in the aggregate it
has to duplicate. For example, price is unimportant in inter-aggregate
queries, so item prices disappear from the read model.

The aggregate gets a little more involved; it has to track a few more
bits so it can answer the queries. However, it was not painful, nor a
great deal of extra code.

Of course, now we know that viewing a tab is immediately consistent,
and so could relax the event dispatch to subscribers to take place
asynchronously and likely have no bad effects on user experience.