Adds function profiling utility to be used in conjunction with Breakpoint

Added time_profile which is a method annotation, it is excellent in identifying
the sources of slow components. Just annotate any methods you want to profile
for a test run with time_profile and the output is a neat indented profile
readout for the execution time of the method and the total time the program has
been running.
Merge pull request #396 from lukecampbell/time_profile-r2

Adds function profiling utility to be used in conjunction with Breakpoint