Improved and optimized the S-expression parser.

This update includes many improvements to the S-expression parser.

- Fixed outstanding lexer/parser bugs.
- Added S-expression parsing benchmark and optimized the lexer
  and parser, getting over a 2x speed increase
- Added skip functions for the parser.
- Implemented parser_load_file for Windows and POSIX platforms.
- Changed the UTF-8 error recovery logic to treat entire illegal
  byte sequences as a single UTF-8 replacement character.
- Added strndup function which takes an allocator from which the
  new duplicated string is allocated from.
- Optimized isdigit/todigit/isudigit/toudigit on CPU architectures
  with branch prediction units.