Don't require a call to replace()

Currently just turn the put_back() into a virtual call until the corresponding
bug in Rust is fixed.
Merge pull request #4 from alexcrichton/virtual-destructor

Don't require a call to replace()