Sorted dict 1

Pull request for SortedDict and BalancedTree23 taking into account Kevin Squire's feedback from the past 12 days.
I'm wondering if the block above is necessary?  It keeps things from being undefined, which can be good, but it also maintains references to `k` and `d`, even after these might otherwise be unreferenced, so they won't be garbage collected until after the tree is disposed of.  This probably isn't a big deal most of the time, but occasionally could be surprising.

It seems that you (almost?) always check for your sentinel values before accessing the data or tree nodes, so I would consider removing this.  If the data values here are ever accessed, it is almost certainly an error, and it would arguably be better if an error were thrown than to return the values stored here.

The only exception I can think of is when displaying a node for debugging, but even there, it would probably be worth just special casing the sentinel nodes.