Rule parser

Let's see if tests pass.
I only need the offset in the file so I can correct the location information in the second stage of parsing.
If you want I could store that in a `Source` object, but I'm not sure how to properly determine the end location of the sentence. I would just duplicate the end position to match the start since I only need the beginning of the string.