Move the sampling profiler into base

This also cleans up many aspects of the API:
  - Rename SProfile->Profile
  - Don't include sprofile_ in function names, use module scoping
  - Export only @profile, all others get scoped
  - Combine _tree and _flat into a single Profile.print() method
  - kwargs for Profile.print():
       format:   :tree, :flat
       C:        true, false  (whether to show C instruction pointers)
       combine:  true, false  (whether to merge ips resolving to same info)
       cols:     <Integer>    (the number of columns used in formatting)
  - Pass data as an argument to Profile.print() (now it's possible to
       profile the profiler!)
  - Define a LineInfo immutable to store code lookups (instead of tuples)
  - Use better variable names
Add documentation for Profile