MultiSet implementation
refactor multiset to be consistent, union, intersection should return new instances