This builds on the work @mathewc started with benchmarks. There are a lot of things that would be nice to have in benchmark form as we evaluate improving various parts of pipeline performance like async/await elimination, `Task` vs. `ValueTask`, allocations, general algorithmic improvements, etc.
Overall:
- Upgrades to latest BenchmarkDotNet
- Moves the benchmarks project out of tests/ to benchmarks/ (this allows us to do fun things with `Directory.Build.props` and such down the road for _only_ tests and simplifies some things - the move itself is minor just doing it up front.
- Adds some benchmarks as examples - a few areas I'm poking at but haven't gotten into PRs yet (these can be dropped from this PR if wanted).
To run benchmarks:
```ps1
dotnet run -c Release -f net6.0 --project .\benchmarks\WebJobs.Script.Benchmarks\
```
This will present a prompt with all benchmarks:
```text
Available Benchmarks:
#0 AuthUtilityBenchmarks
#1 CSharpCompilationBenchmarks
#2 ScriptLoggingBuilderExtensionsBenchmarks
You should select the target benchmark(s). Please, print a number of a benchmark (e.g. `0`) or a contained benchmark caption (e.g. `AuthUtilityBenchmarks`).
If you want to select few, please separate them with space ` ` (e.g. `1 2 3`).
You can also provide the class name in console arguments by using --filter. (e.g. `--filter *AuthUtilityBenchmarks*`).
```
Note the instructions to do similar from the command line, e.g.:
```ps1
dotnet run -c Release -f net6.0 --project .\benchmarks\WebJobs.Script.Benchmarks\ --filter *ScriptLogging*
```
Co-authored-by: Lilian Kasem <likasem@microsoft.com>