Ported lax_parse() to C, 15% faster

Ported lax_parse() to C and cleaned up prior code. New benchmark results:

```
                 user     system      total        real
Liquid:      0.000000   0.000000  26.770000 ( 26.820869)
Liquid-C:    0.000000   0.000000  22.710000 ( 22.767058)
Ratio: 84.88561094588167%
```

Passes all current Liquid tests. Thoughts?

@camilo 
@dylanahsmith 

Are a lot of those strings equal? Does it make sense to freeze any of them to avoid allocating twice? I don't understand the code well enough yet to say that it's specifically the case here, but it might be in other cases.