Fixed infinite loop, minor cleanup, added matching benchmark. ~300 microseconds per short match; not bad.