use ActiveModel::Validations instead of raising exceptions
fix order of arguments for assert_equal
raise the exception in Phone.parse! where it's expected
consolidate private instance methods
ArgumentError is more descriptive here
simplify returns
avoid $n regexp variables
Phone.extract_extension is not responsible for cleaning the number
spacing
simplify Phone.parse
load countries when initializing

* this way is thread safe
* many more places were assuming it existed
* the gem barely works without it
simplify Country finders
clarify Country#matches_local_number?
Country#matches_local_number? isn't responsible for checking full numbers
memoize country regexs

this makes tests basically instant!
consistent naming for saved regexs
create lookup indexes for country finders
split apart Country#matches_local_number?
simplify Country#number_parts as Country#parse
Country#parse should try for the most complete matches first