Add difference_type in iterator_adapter
Extract from bst.h iterator-related API to a separate header file
Use reverse_iterator to walk the BST in reversed order