Enhancement and bug fix to address an npm issue

(I'd intended for this to be 2 patches, but GitHub decided it has to be one. Sorry about that.)

## Allow for one ConfigChain to extend another

This is needed in order to fix isaacs/npm/issues/3121.

 **HOLD FOR NOW** I'm working on a better, less hacky, approach.

Add the ability to create a new ConfigChain instance from an existing one. The npm use case (see issue above) is to prepend the publishConfig to the existing config, such that any new values are transparently accessible. The bug that needs to be fixed is that the sources were being lost, so any named lookups fail.

Since objects only have a single prototype chain, it's not feasible to clone the whole config chain. However, we can clone the list, the sources, and the root, so that the new instance retains all of the functionality of the original. If a new object is added to the front of the config chain using 'unshift' (which is what npm does), the values in the new object are available only via the new config chain instance. However since the 'add' functions append to the prototype chain, they will add to both the old and the new config chain instances.

## Bug fix for retrieving named config values

There's a bug in the get() function when retrieving a value from a named config, when that named config is either the only or the last config in the chain. For example, the following code throws an exception:

```javascript
var cc = new CC()
cc.add({foo:'flooby'}, 'named_config')
  .on('load', function (cc) {
    cc.get('foo', 'named_config')
  })
```

What's happening is that proto-list sets the \_\_proto\_\_ value of the config data to its root, but for the first guy in, root is null, at which point the data object is no longer a proper Object, and no longer has a hasOwnProperty() function. So when get() tries to call hasOwnProperty(), it throws because the function doesn't exist.

I've fixed this by always using Object.hasOwnProperty, instead of trying to call it as a function on the data object. I've also added a bunch of unit tests for named configs.