Set#delete returns the canonical empty set when removing last item
Set#each returns an Enumerator if called without block
Add SortedSet structure

This immutable, persistent collection uses a balanced binary tree to maintain a sorted set.
AVL trees are used for simplicity of implementation, though some other type of tree,
perhaps a red-black tree, would likely provide better performance characteristics.
There is still lots of room to optimize for performance, as well as filling out and
completing the API.

A custom sort order can be set using a 1-argument or 2-argument block when initializing
a new SortedSet. A 2-arg block will be used as a comparator, and should return a
numeric value (like #<=>). A 1-arg block will be used to transform each item before
comparing.

Users of Hamster::SortedSet need to understand that the comparator function (or #<=>
if none is provided) is used to determine equality. If the comparator returns zero
for a pair of items, they are considered "equal" (and only 1 will be retained in
the set).
Set#sort returns a SortedSet

Closes #34.

Note that 'alias' is used rather than 'def_delegator'. This is intentional.
Although internally, the implementation of #sort and #sort_by is the same,
externally, library users should think of them as 2 different API methods.
If one is overridden, there is no reason for the other to change at the
same time (unless the user specifically makes it so).
Make Set#filter spec a little stricter (when it filters everything out)