DA: Fixing multiple campaigns per node:hour in delivery data
DA: Take the latest delivery data record per node:hour:campaign
 * Previously the latest record per node:hour was taken
 * Need to account for multiple campaigns per node

TODO: Assess impact on node delivery metrics and reporting
DA: Support multiple campaigns per node:hour
 * Update DeliveryMetrics.UpdateNodeHour to sum impression count and spend for node:hour metrics from multiple campaigns
 * Remove handling of duplicate rows (not a valid scenario, duplicates removed as canonical delivery data is built)
 * Add campaignId to dedupe key in AppNexusBillingReport
 * Move canonical delivery data field names to their own class