Refactor to simplify code
Verify that depth argument now works with circular === true
Fix indents

Coding to someone else's style is hard sometimes!
Added test to ensure prototypes are maintained, and re-added the code to implement it

It was removed in the last refactor as all tests were passing without it!