Explicit constructor behavior and optimize merge and union

If merge or union are operated on empty collections, they behave as if the argument was provided to the constructor.

Closes #207