More tests, fixes and optimizations

fixed: isShadda now always returns a boolean and doesn't use regex
fixed: arabicrange() now doesn't throw an error
added: more tests
enhanced: arabicrange() now memoized (caches the result instead of redundant recalculation)
changed: most is* functions are now in a seperate file, however it is more of an implementation details and doesn't affect araby APIs

next: reducing the use of regex in araby and not using it at all if possible