Add some support for return type deduction for recursive conditionals

Per Scott Prager's Request, since he seems to have the most experience using generic lambdas so far ...

I am not sure if this will be standardized.

Note, while this deduces:
auto Fact5 = [](auto f, auto n)
    n < 5
      ? (n < 3
          ? (!n ? 1 : f(f, n - 1) * n)
          : f(f, n - 1) * n)
      : (n == 6
          ? f(f, n - 1) * n
          : f(f, n - 1) * n);

  auto M = Fact5(Fact5, 6);

It will not deduce the following:
auto F666 = [](auto f, auto n)
    n <= 0 ? n + 1 :
           ([=](auto f2) // -> decltype(n) // Need Decltype here
           n <= 0 ? 1 : f2(f2, n - 1) * n)(f);

  auto R = F666(F666, 2);

To get the above deduction to work will require modifying TreeTransform - I will try and attempt that next, but if I can't get it to work by tomorrow - will need to back burner it and start working on the proposal since the mailing deadline is looming, and I've been spending more time on the implementation than I had intended.