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.

> I am pretty iffy about including the naive bracket below 

What's the alternative? Do we add a specific IO version?