[counters] Add mono_counters_delete and mono_counters_on_register/delete callbacks

Add support for deletion of currently registered counters. Also add support for callbacks registration on registration and deletion of a counter.
This changes will be used by mono-perfcounters to register user created PerformanceCounter and by the log profiler to sample newly created counters and to stop sampling deleted counters.

Because we can now add counters while the runtime is already initialized, we also have to make sure that the API is thread safe. For now, only mono_counters_foreach is not.
[perf-counters] Register user created PerformanceCounter in counters

This allow a sampling of user defined PerformanceCounter in counters.
This will be used by the log profiler, as well as by the --stats parameter to dump counters.
[perf-counters] Fix return of the same counter even with different a counter parameter

The same counter instance would be returned if we use the "instance" parameter instead of the "counter" parameter.
Also it is the name of the counter that is stored in mono_perfcounter_create (mono-perfcounters.c:1488).
[proflog] Add counters_add and counters_del

These are utility functions to manipulate the list of counters to sample.
[proflog] Add locking to counters_add, counters_del and counters_sample

Access to counters has to be thread safe because counters_add will indirectly be called when a new PerformanceCounter is created, which can be done by any thread in C# code.
[proflog] Edit counters_init_add_counter to use counters_add
[proflog] Add counters_emit + Edit counters_init to use it

Put the emission of counters metadata into a separate functions, to make it easier to emit counters added after runtime initialization.
counters_emit is going to be called at each sample to check if there is new counters, and if so then emit there metadata.
[proflog] Add mono-counters register/delete callbacks
[mprof-report] Add Performance Counters category description string