Remove some simple Ruby 1.8 and 1.9 code

I think these are the safest to remove from `lib/`:

* Remove `IO::binread` implementations.
* Use `#define_method` instead of `#class_eval` to create methods.
* Remove `RUBY_VERSION < 2` comparisons.
* Not needed code related with method args default values.
* Some comments updated.

Some parts from #2497 are fixed with this:
> * [x] lib/chef/mixin/securable.rb#L115-L119
> * [x] lib/chef/mixin/template.rb#L26-L36
> * [x] lib/chef/node/immutable_collections.rb#L78-L83
> * [x] lib/chef/resource/lwrp_base.rb#L76-L87
> * [x] lib/chef/resource/template.rb#L105-L107
> * [x] lib/chef/run_context.rb#L197-L208
> * [x] lib/chef/search/query.rb#L135-L136
> * [x] lib/chef/util/path_helper.rb#L104-L106
> * [x] lib/chef/mixin/command/windows.rb:21

I hope I have not broken anything :pray:
I think what we would have preferred here is to use default arguments to the block, like:

```ruby
define_method(name) do |permissions=nil, principals=nil, args_hash=nil|
# etc.
end
```

I think the problem here was that Ruby 1.8 doesn't let you have default arguments to blocks. Also this will let us remove the `raise ArgumentError.new` line.