Improving Schema#dereference

According to the discussion we've had about `Schema#dereference`, here is my first shot at implementing it.

There's one thing I didn't have in mind when we talked about returning the key from the method: what do we do when it is called with a "reference" that already is a fully dereferenced object? We have no idea what the key to get this object was.  
So I introduced an optional `key` parameter that can (must?) be used when we're interested in getting back the key of the dereferenced object and passing to the method a hash that might already be dereferenced.  
This argument is also used for the recursion part of the method, so I guess it would be there anyway.

You might be surprised to see that the method returns `[definition, key]` instead of `[key, definition]`, which would probably look more natural.  
I took this liberty because the current codebase clearly shows that, most of the time, we want to get the definition rather than the key. I found more elegant to do something like `value = schema.dereference(ref).first` than `_, value = schema.dereference(ref)` or `value = schema.dereference(ref)[1]`

Everything is of course open to discussion... but I do hope you'll like it ^^

I have also added some more tests and tried the doc commands on my own set of schemas. This set is not complete yet but the results look the same as with the former implementation.