This functionality is provided by libFuzzer, which is available on most platforms. However, libFuzzer is also missing on some platforms. E.g. https://github.com/google/sanitizers/issues/1165

Thus, it could make sense to implement this in our code to be able to execute the existing fuzz inputs.

The basic idea is to check if a folder was passed into `main` (https://github.com/bitcoin/bitcoin/blob/63314b8211d795b2bf0814e244d801e74f50b152/src/test/fuzz/fuzz.cpp#L75) and then iterate over the files and pass them into `test_one_input`.

#### Useful skills:

* C++17 std::filesystem
* https://github.com/bitcoin/bitcoin/blob/master/doc/fuzzing.md


#### Want to work on this issue?

For guidance on contributing, please read [CONTRIBUTING.md](https://github.com/bitcoin/bitcoin/blob/master/CONTRIBUTING.md) before opening your pull request.

for (int i = 1; i < argc; ++i) {
        
        
        if (strlen(argv[i]) > 2 && argv[i][0] == '-' && argv[i][1] == '-') {
            g_args.push_back(argv[i]);
        }
    }
}
const std::function<std::vector<const char*>()> G_TEST_COMMAND_LINE_ARGUMENTS = []() {
    return g_args;
};
std::map<std::string_view, std::tuple<TypeTestOneInput, TypeInitialize, TypeHidden>>& FuzzTargets()
{
    static std::map<std::string_view, std::tuple<TypeTestOneInput, TypeInitialize, TypeHidden>> g_fuzz_targets;
    return g_fuzz_targets;
}
void FuzzFrameworkRegisterTarget(std::string_view name, TypeTestOneInput target, TypeInitialize init, TypeHidden hidden)
{
    const auto it_ins = FuzzTargets().try_emplace(name, std::move(target), std::move(init), hidden);
    Assert(it_ins.second);
}
static TypeTestOneInput* g_test_one_input{nullptr};
void initialize()