A general Profiler data type, in the same style as Trace.

Needs to be rebased after topic/trace.

This is still pretty rudimentary, but I think it is probably ok to start with and we can add combinators as we go. 

The other useful thing to do would be add a constructor to support profiling to some standard metrics library.

So I was curious about this when I saw your commit the other day - there's nothing we can do to restrict the data to only having bracket-style data (eg. instead of start/end/done)?