expose CharRanges module

add newtypes to provide a cleaner interface
re-add duplicate bounds comparison to accommodate strange GHC behaviour