Added .mli files for charset and hashset

- Made hashset an opaque type requiring some changes to code that used the fact
  that it is implemented as a hash table
- Added function to copy the epsilon transition table that doesn't depend on the
  underlying hashset implementation
- Updated code that copies the epsilon table to use the above function
Added .mli for Nfa
Clean up the formatting