refectoring the Lexer iterator

refactored the Lexer iterator using enumerate() per @aochagavia 's suggestion (so it keeps track of the offset while iterating, without updating it manually every time we advance by a char in the input string).

I left the Lexer struct as it was, as I think it only needs to keep the status of the current offset in the original string to extract the next token (restarting from the last offset by slicing the original string should be cheap; the docs mention that [slicing a str is O(1)](http://doc.rust-lang.org/std/str/trait.StrSlice.html#tymethod.slice) ).