Put fusion code into Fusion.scala file
Transform the Fusion code into something more generic.
Add composeResults to Fused abstract class.
Move SetOptimized and MapOptimized (uncompleted) inside their own file.scala. Also tried to move the macros outside ScalaMetaFusionTraverser and ScalaMetaTraverser in a common base class but nothing works.
Replace Collect code to use unification instead of dependent types.
Put the @unchecked annotation to suppress the 'abstract type pattern t is unchecked since it is eliminated by erasure' warning.
Add documentation for SetOptimized and MapOptimized and make the imports more consistent.