Made object methods return extended objects if called on extended objects

Noteably select() and reject().

This allows 

```js
Object.extended({a:5,b:4,c:2}).select("a", "b").merge({f:16});
```

rather than

```js
Object.extended(Object.extended({a:5,b:4,c:2}).select("a", "b")).merge({f:16});
```

If called statically on a non-extended object it returns a plain object.

```js
Object.select({a:5,b:4,c:2}, ["a", "b"]).merge({f:16}); // Error, merge is undefined.
```