Add a correct-but-slow union function

--HG--
extra : amend_source : 211448dcfac74fa55b0171e9d3ec0ef668e6744e
Make foldlWithKey' actually strict

--HG--
extra : amend_source : a74b03e269e8d63ca08368c528ba508831edcfc9
Add fold functions