Write a function that takes an array of donor transactions and groups them by campaign, returning the top three campaigns by total volume on Givzey.
Each transaction is a dictionary with campaign as a string and volume as a non-negative number. Return a list of dictionaries containing campaign and total_volume, ordered by descending total volume, then ascending campaign name for ties.
def top_campaigns(transactions):