feat(extend): optionally deep-extend when last parameter is `true`

Same as #10507 but with my review comments addressed and jscs fixed.

Someone quickly review this so we can land it :<
What about object cycles? At least, I think we should put something in the docs about not trying to deep extend an object that has cyclic references.