libcollections: Add a Multiset data structure.

This is not finished, but I want some feedback before I go too far on my own. This defines two new traits, `Multiset` and `MutableMultiset`. I currently have a partial implementation of these traits, `TreeMultiset`, based on TreeMap, and I plan to add another one based on HashMap. I have tried to make these traits and the `TreeMultiset` implementation closely correspond to the Set traits and `TreeSet`.

The `TreeMultiset` implementation is missing a few things, mostly some trait implementations. I also plan on adding  a multiset sum operation, which is distinct from multiset union (see [this Wikipedia page](http://en.wikipedia.org/wiki/Multiset#Multiplicity_function) for reference).

One thing I want to add to the Multiset trait is a `to_set` method that will return the underlying set of the multiset, which would just be all the distinct values in the multiset with multiple occurrences removed. However, this currently doesn't seem possible, as noted in #8154.

Another thing I've wondered about: the Multiset trait could inherit the Set trait, but the way I've written it, MutableMultiset could not inherit MutableSet. One way this could be changed is to inherit MutableSet and use `insert` as a method to insert one occurrence (and `remove` as a method to remove one occurrence) and then add trait methods for inserting multiple occurrence, perhaps called `insert_multiple`/`remove_multiple` or `insert_many`/`remove_many`. I'm just not sure if this makes sense.
Then you may write a single `impl<'a, T, I: Iterator<(&'a T, &'a uint)>> Iterator<&'a T> for MultisetItems<'a, T,  I> {`, correct?