merge now returns deeply immutable object in all cases

fixes bug with merge when overwriting target object
moves tests to use complex objects
Merge pull request #12 from raorao/merge-overwrite-fix

merge now returns deeply immutable object in all cases