Refactor gem logic into BundlerWrapper

gem_is_bundled?("thin") => bundler.has_gem?("thin")

This reduces the surface area of the LanguagePack and keeps the internals of the `bundler` object lock file less exposed.
Refactor has_windows_gemfile_lock? to bundler

Hide the internals of the Gemfile lock parser from LanguagePack
Faster `gem_version`

Implement `bundler.gem_version` to be constant time lookup using a hash instead of scanning with a detect.

Checking for Gemfile.lock is redundant since we have a `NoLockfile` language pack that detects this before any other packs can be run.

Reduce the Language Pack footprint so it knows less about the internals of the lockfile parser