Code cleanup using lookup tables

There were parts of the code that seemed to make more sense as a lookup table instead of a long list of if/else statements.  Changing it to this form seemed to cut down (just slightly) the execution time and memory usage.

Also added some comments and helper functions to make it easier to understand (and hopefully improve) the algorithm.

@tlycken I was actually planning on adding the initial tests as a pull request too, but I forgot that I put them in the master branch. Do you mind looking over that as well?  Sorry about that.
I think you're right.  Having the `push!`/`unshift!` part separate can make it easier if we need to change the how we are outputting the data.  Do you think we should explicitly move the `if` statements inside the while loop and the `chase` function or leave it to Julia to figure that out?