deep_dup()
Instance Public methods
Returns a deep copy of object if it's duplicable. If it's not
duplicable, returns self.
object = Object.new
dup = object.deep_dup
dup.instance_variable_set(:@a, 1)
object.instance_variable_defined?(:@a) # => false
dup.instance_variable_defined?(:@a) # => true