Use map instead of array for stats output

Also rounds the doubles to 3 decimal points.
Add versions to serialization
Use ThreadPool's scheduler instead of new scheduler per metric