Fix fetch and add unit test.

Current behavior of `fetch` is incorrect if the default value passed is a hash.  This occurs because of the use of `convert_hashes_to_parameters`.  If the value passed to `convert_hashes_to_parameters` is a hash, this value will be converted to a `Parameters` hash and stored at `self[key]`.  This seems inconsistent with how default values works with regular hashes.

Also, looks like this file had a bunch of trailing whitespace...if you want a clean blame log I can resubmit the PR without the whitespace cleanup.