Optimize Hash#merge and Set#union by using Trie#bulk_put

According to suggestion in #136, implemented Trie#bulk_put which performs several puts at once without creating new temporary Trie objects on every put operation. This method is then used in Hash#merge and Set#union in order to improve their performance.

Benchmark for Set#union: https://gist.github.com/dubek/e66579046eb57c589a64
Benchmark for Hash#merge: https://gist.github.com/dubek/979fd1bd74c0f80c2ce7

(The `old_union` and `old_merge` methods in those benchmarks are the original implementations of those methods before this patch.)

Note that there's still room for improvement: once we get to modifying the trie's children we're back to calling the original `#put` which creates temporary Trie objects. I'm still thinking if there's a way to overcome this (mark these new children as "still-in-progress" and the use `#put!` for all the "still-in-progress" children tries?).