[perf-counters] Fix bug on SharedCounter decoding

The structure of the encoded SharedCounter is as follow :
 - compressed data type : 1 byte
 - index in the category : 1 byte
 - name of the counter : null terminated string
 - help of the counter : null terminated string
[perf-counters] Declare shared data header type directly after creation

Fix the following bug : shared_data_find_room return twice the same memory region because it was not marked as "in use" by setting the header.ftype value.
This bug is triggered when we want to create a new shared area (for example a new FTYPE_INSTANCE area) while creating another area (for example a new FTYPE_CATEGORY).
[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).
[counters] Make API thread safe
[counters,proflog] Add mono_counters_on_register/delete callbacks + Use them in proflog

This is used for counters that are defined after runtime initialization. It implies that TYPE_SAMPLE_COUNTERS_DESC can now be emitted at any time, and not only once.
[perfcounters,proflog,mprof-report] Add support for Performance Counters sampling in the log profiler