General simplifications and bugfixes, just a work-in-progress

Suggested simplification and code cleanup & some optimization work and a fix to https://issues.scala-lang.org/browse/SI-6913 (which is debatable whether docs or impl is wrong, but if impl was right, then there's essentially no difference between fallbackTo and recoverWith)

This will be split up into individual commits when done.