The same in-memory rule for which side of a cashflow split a transaction
belongs to (income category or uncategorized inflow; expense category or
uncategorized outflow; transfers/savings/investments on neither) was
re-implemented in TransactionAnalysisController (isIncomeSide/isExpenseSide)
and inline in CashflowAnalyticsController::sumTransactions.
Expose it once as Transaction::isIncomeSide()/isExpenseSide() and have both
controllers consume it, so the two analytics surfaces cannot drift on how a
refund, reversal or uncategorized transaction is bucketed. Behaviour-preserving.