Profiling the rendering of a liquid template

This is an improved version of what I originally put together in #361

This PR adds a simple profiling system to liquid rendering. Each liquid tag ({{ }} and {% %}) is processed through this profiling, keeping track of the partial name (in the case of {% include %}), line number, and the time it took to render the tag. In the case of {% include %} and any tag that requires blocks (like {% if %} and {% for %}), the tags inside of the partials and blocks are themselves marked as children in the final profiling structure, letting any user of this information view top level information and to dive down into more details. With this, it's now possible to track down exactly which tags are taking a long time to render.

Included in this PR are internal changes to parsing to calculate and keep track of the line numbers of individual tags and tokens in the source, as well as some specific tracking of the current partial, such that using the include tag will be tracked as a nested render. I initially looked into adding this information to error exceptions but that was proving more complicated and would require quite a few changes to how tags handle syntax errors.

I was able to hook profiling into Liquid through one small refactoring (`Block#render_token`) and alias method chain-like hooks into the appropriate classes, significantly reducing the code impact on the core Liquid code base. There are also changes to parsing to figure out the line numbers of the tokens, Template to start up a profiling pass, and to Tags and Variables for easier output of the contents of these items when printing out the profiled information, but otherwise the actual profiling is kept separate.  The hooks install and uninstall themselves as needed, which ensures that if profiling is turned off that there is no performance impact.

The current profiling runs for these changes can be found here: https://gist.github.com/jasonroelofs/79bde3d22ede168a5ae8

I've also put together an example template and resulting profiling output here: https://gist.github.com/jasonroelofs/c8148317ffb09e541633

If you prefer not to have this in the core I would love to discuss what changes Liquid does need for this functionality to live as its own gem and hooking into Liquid when needed.
I agree that monkey patching String is not great solution. I gave this module inclusion trick a try but it's probably a bit more expensive than you were expecting:

```
/Users/roelofs/.rvm/rubies/ruby-2.1.2/bin/ruby ./performance/benchmark.rb lax
Rehearsal ------------------------------------------------
parse:         6.350000   0.020000   6.370000 (  6.363048)
parse & run:  11.350000   0.020000  11.370000 ( 11.377402)
-------------------------------------- total: 17.740000sec

                   user     system      total        real
parse:         6.370000   0.010000   6.380000 (  6.382853)
parse & run:  11.480000   0.020000  11.500000 ( 11.502240)
/Users/roelofs/.rvm/rubies/ruby-2.1.2/bin/ruby ./performance/benchmark.rb strict
Rehearsal ------------------------------------------------
parse:         7.010000   0.020000   7.030000 (  7.030574)
parse & run:  11.890000   0.010000  11.900000 ( 11.908353)
-------------------------------------- total: 18.930000sec

                   user     system      total        real
parse:         6.990000   0.010000   7.000000 (  7.009632)
parse & run:  12.000000   0.020000  12.020000 ( 12.020997)
```

```
/Users/roelofs/.rvm/rubies/ruby-2.1.2/bin/ruby ./performance/profile.rb
==================================
  Mode: cpu(1000)
  Samples: 1616 (0.00% miss rate)
  GC: 459 (28.40%)
==================================
     TOTAL    (pct)     SAMPLES    (pct)     FRAME
       162  (10.0%)         162  (10.0%)     block in Liquid::Template#tokenize
       959  (59.3%)         115   (7.1%)     Liquid::Block#parse
       178  (11.0%)         103   (6.4%)     Liquid::Context#variable
       168  (10.4%)         101   (6.2%)     Liquid::Variable#lax_parse
       245  (15.2%)          67   (4.1%)     Liquid::Context#resolve
        67   (4.1%)          67   (4.1%)     block in Liquid::Variable#lax_parse
      1216  (75.2%)          54   (3.3%)     Liquid::Block#render_all
       210  (13.0%)          38   (2.4%)     Liquid::Variable#initialize
       199  (12.3%)          37   (2.3%)     Liquid::Template#tokenize
        32   (2.0%)          28   (1.7%)     Liquid::If#lax_parse
        27   (1.7%)          27   (1.7%)     Liquid::Context#increment_used_resources
      1162  (71.9%)          27   (1.7%)     block in Liquid::Block#render_all
        23   (1.4%)          23   (1.4%)     Liquid::Context#has_interrupt?
        21   (1.3%)          21   (1.3%)     Liquid::Context#lookup_and_evaluate
        20   (1.2%)          20   (1.2%)     block in Liquid::Context#find_variable
        32   (2.0%)          19   (1.2%)     block in Liquid::Context#variable
      1115  (69.0%)          17   (1.1%)     Liquid::Block#render_token
        29   (1.8%)          17   (1.1%)     Liquid::StandardFilters#to_date
        13   (0.8%)          13   (0.8%)     Liquid::Context#resource_limits_reached?
        13   (0.8%)          13   (0.8%)     Liquid::Context#[]=
```