You might also try recreating the "fifteen" table as an IOT and analyzing it, which would probably be the practice if it were implemented ... my local results (10g)
Code:
union all dual     11
table of integers  13 (heap table)
collection type    9
table function     25
pipelined function 17
group by cube      1743
... and ...
Code:
union all dual     11
table of integers  8 (analyzed IOT)
collection type    8
table function     20
pipelined function 12
group by cube      1702
I also tried a hint-less version of all the queries, and got ...
Code:
union all dual     8
table of integers  7
collection type    7
table function     20
pipelined function 14
group by cube      1717
The Union-all seems to benefit there.