Parse ranges and unions: '1-3,5-7,12' → [1, 2, 3, 5, 6, 7, 12]