Trie#put, Trie#bulk_put: return self if value is not changed

Modify Trie#put and Trie#bulk_put so they don't create a new Trie
instance if the value being stored is identical (same Ruby object_id) to
the value that already appears in the receiver.

This allows the nice behaviour in which Hash#merge and Set#union simply
return self when merging with a subset Hash/Set (and of course same for
Hash#put and Hash#store).
Vector#set: return self if setting item to identical value
Vector#drop, Vector#take: return self if unchanged
Optimize Set#difference by using Trie#bulk_delete

Implemented Trie#bulk_delete which deletes several entries at once
without creating new temporary Trie objects on every delete operation.
This method is then used in Set#difference in order to its performance.
Optimize Trie#filter by using Trie#bulk_delete

This improves performance of Hash#filter and Set#filter.
Set#filter: Split entry to key+value using Ruby block arguments
Add Hamster.from to allow building nested Hamster structures

issue #140
Add Hash#update_in and Vector#update_in to update values in nested structures

issue #140