deal with regex sets as combinable sets of numeric ranges

so this one is a bit experimental... it's much faster than my other pull request and the tests mostly pass

**new class**: I made a class that's for manipulating discontinuous ranges that allows for easy addition and subtraction of ranges.  I published it to npm and wrote some tests for it. it's called [DiscontinuousRanges] (https://github.com/dtudury/discontinuous-range) :)

**test**: there was a test to make sure the output of anyRandCharacter is returned by `/./`, but the new code doesn't use anyRandCharacter for that anymore ***so it failed***.  I couldn't find any other reference to anyRandCharacter so I removed it
also need to consider the case for which `expanded_set.length` will be `0` like with the regexp `[^\d\D]`