overloaded_function, fusedがラムダ式に対応した

ちょっと頑張ってmake_overloadやmake_fusedでラムダ式も扱えるようにしました。

https://github.com/fimbul/shiro/blob/master/shiro/functional/overloaded_function.hpp
https://github.com/fimbul/shiro/blob/master/shiro/tuple/fused.hpp

これで以下のようなコードが書けるようになりました。
かくなる上は関数ポインタ対応か。

#include <shiro/functional.hpp>
#include <shiro/tuple.hpp>
#include <cassert>

int main() {
  constexpr auto f = shiro::make_fused(
      shiro::make_overload(std::plus<int>{}, std::minus<double>{}));
  static_assert(f(1, 2) == 3, "");
  static_assert(f(3.0, 1.0) == 2.0, "");
  static_assert(f(shiro::make_tuple(1, 2)) == 3, "");
  static_assert(f(shiro::make_tuple(3.0, 1.0)) == 2.0, "");

  auto g = shiro::make_fused(
      shiro::make_overload([](auto a, auto b) { return a + b; },
                           [](auto a, auto b, auto c) { return a + b + c; }));
  assert(g(1, 2) == 3);
  assert(g(1, 2, 3) == 6);
  assert(g(shiro::make_tuple(1, 2)) == 3);
  assert(g(shiro::make_tuple(1, 2, 3)) == 6);
}