Multiple improvements

### Range factory
The current design allows for `Range`-compatible elements to be added except for the case where `Tree#ensure_exclusive_end` constructs a `Range` in a private method. In keeping with good design practices of containers such as `Hash`, this pull requests allows for a custom range factory to be provided to `Tree#initialize` while maintaining perfect backward compatibility.

### Search in empty trees failing
This pull request adds a `nil` guard in `Tree#search` to protect against empty tree searches failing.

### Cosmetic improvements
- Language & whitespace in specs
- Gemfile addition
- `.gitignore` update