Changes: - Make a better unified Error handler - Add position to lexer tokens - Add useful apis such as `Error::expected_token`