Internal pool fixes

This PR fixes several major problems with InternalPool. See #418 for context.

1. `busy_size` and `idle_size` were previously performing unsynchronized iteration of the threads array. These are now simple scalars that are tracked separately.
2. `to_a` returned the unsynchronized thread array. It now synchronizes a duplication and returns the duplicate unsynchronized.
3. `create` and `clean_thread_locals` are now private.
4. `active?` is now O(1) rather than O(n)
5. `each` uses `to_a` now and operates unsynchronized on a duplicate of the `@all_threads` array, rather than opting for synchronized access to the real array.
6. `get` performs an O(1) pop with no intermediate array, rather than an O(n) array build.

The code is less clean than I'd like, but it preserves all the existing semantics while fixing the outstanding problems.