Как в 2 мерном массиве оставить только уникальные записи, а у одинаковых записей сложить значения?
$t = array();
foreach(твой_массив as $&v)
$t[$v['first_name'].";".$v['last_name']] += $v['duration_sum'];
В итоге у тебя будет массив с ключом вида Богдан;Фасонов и значением суммой, дальше уже показываешь или пересобираешь как хочешь.
И в чем суть проблемы? 
Пишите функцию, скажем, isUnique($person) которая будет чекать массив на уникальность по сравнению с исходным. Тупо перебираем и сравниваем - что сложного? В качестве возвращаемого значения - сумма всех найденных duration_sum у совпадающих с аргументом массивов.
Т.е. если нашел совпадение (а оно будет хотя бы одно исходя из условий задачи), то плюсует duration_sum
И все. Получите на выходе число. Пишем массив в новый массив (тот который будет без дубликатов) персонажа с новым значением duration_summ
Перед началом сравнения проверяем, что в новом массиве (который без дуликатов должен быть) такого персонажа (который в аргументе функции) уже нет. Если уже есть, значит мы по нему уже искали дубликатов и внесли уже его в новый массив.