(Hybrid) Improving performance by eliminating unnecessary speller creation and deletion

This is a hybrid solution between #15 and #16 that retains the performance benefits of the original fix.

I also fixed a memory leak: the `@config` memory allocated in `Speller#initialize` was never being freed. It's now being freed in the finalizer or when the user explicitly calls `#close`.
Considering this method delegates to `#initialize` there's no need to explicitly redefine the arguments and their documentation. This should instead just use `self.open(*args)`. This ensures that if `#initialize` is altered we don't also have to alter this method.