safety: remove all unsafe from FSM code
safety: remove all unsafe from FSM code

This continues the trajectory of the previous commit and removes all
unsafe code from the core FSM matching loops. Namely, we stop using raw
pointers and use indices instead. This results an a second bounds check
in our core loop, but this also does not appear to regress performance.
Indeed, this preserves the performance improvement witnessed in the
previous commit.

BurntSushi/aho-corasick