Shain/client logger

:construction: Still some things not quite fleshed out, but a good starting place.

Basically, this proposes a new logging framework/style that retains backwards compatibility (if needed) and allows a simpler, more modular approach to creating and configuring loggers for the chef client. Also included would be some new loggers giving native support for syslog (finally!) and Windows (covered in a separate RFC)
@scotthain The problem is that the method signatures are not compatible. For example:

```ruby
LoggerTypeA.new(device, option, option2)
```
This is how the stdlib logger works, it takes one required argument and two optional arguments which are integers (for log rotation stuff)

Contrarily:
```ruby
logger_b = LoggerTypeB.new(device, option: value, option2: value2, level: desired_log_level)
```
This hypothetical logger takes one required argument and an (optional) options Hash. So the method signatures are incompatible in that A takes 3 arguments, while B takes 2, and the type of the second argument to A is an Integer that specifies the "shift_age", while the second argument to B is a Hash. To make this work, you'd need an adapter, like:

```ruby
class StdlibLoggerAdapter
  def initialize(log_dev, options)
    shift_age, shift_size = extract_log_shift_opts_from_opts(options)
    @actual_log_object = Logger.new(log_dev, shift_age, shift_size)
    apply_options_to_logger
  end
end
```