Sanitize perf counter category instance names

- Adds support for instance names passed in by Katana v3+ (currently Katana v3+ breaks perf counters in SignalR)
- Tweaked how instance name is set internally in PerformanceCounterManager to make it testable without affecting the public contract
- Updated the sample project to use Katana v3 to ensure we get coverage of fix
- #3002
nit: dictionary probably would make it simpler `.Select(c => substChars.ContainsKey(c) ? substChars[c] : c)`. Not a big deal though.