cleanup keyword factoring
switch Identifier to storing a string.  switch StringEntry to immutable.  add toString to both and use in a few places.
convert ptr/len pairs over to slices.  add a bunch of debug code, there's a bug hiding in there somewhere (from the original port itself).
remove dead code
convert token.ptr to const and token.ustring+len to a d string
refactor identifier so that it doesn't need to depend on the lexer
StringTable changes

make it a class so it has reference semantics
remove the static member StringTable out of Lexer and make it a parameter to the ctor
more slice-izations

Lexer's ctor now takes a byte[] rather than start ptr, start index, and end index.
toChars renamed to toString and now returns a string
  stop using a static buffer and instead idup, slower but safer
Stop duplicating the module name field in both Lexer and the contained Loc struct
sync changes.. lost track of what's in here but don't want to loose them