Volume.cc: message maps

the diffstat speaks for itself.
i very much disagree on the understandability front.

regarding the int/bool thing:  is it an *actual* problem?  i mean, i thought the 0/false 1/true equivalence would be hard to miss to anybody who's programmed in C or C++.  so if you saw this as fishy, what breakage were you suspecting?  genuinely curious!
i went for ints because "true" and "false" are longer and differ in lengths, so the map definition would be noisier.  if you care about the conversion, i can use those instead.

re "needless negation": that's easily "fixed" by swapping the `.second` numbers and dropping the `!` from `!label.empty()`.  but, if you read the map keys as `(doing, has-label)`, there's less negation than with the `(doing, has-no-label)` interpretation which follows from that.  it's a tradeoff, and i don't care which way it goes, "has-label" or "has-no-label".