Change the way preloading of fdb_c.dll is configured, to be able to handle all deployment scenarios

- if NativePath == null, no preloading (CLR will handle the binding). Will look in working dir and system 32?
- if NativePath == String.Empty, call LoadLibrary("fdb_c.dll") without path, and let the OS binding find the dll (walking the working dir, $PATH, system32, etc...)
- if NativePath == ".\Some\Relative/Path" or "C:\Some\Absolute\Path\" then call LoadLibrary(combined_path) and load a specific file
Refactored db.Attempt(...) to simplify common cases:

- Several overloads of Attempt<T1>, <T1, T2>, <T1, T2, T3>, .... to accomodate multiple parameters
- Several overloads for Action<...args...>, Func<...args..., Task> and Func<...args..., Task<R>>
- Versions where if the last arg is a CancellationToken, then it is propagated
- This is getting a bit ridiculous, maybe this code should be generated from a T4 template ?