use unicode fn instead of list_to_binary

The top-level parse() function would fail with unicode input :-( This made me sad, so I tweaked the parser and added a test that contains funky characters.