Here is Wikipedia's page on binary search trees.
To implement a *binary search tree*, you should first define a `Node` class.
Each binary tree node has, at the minimum, 3 fields: a `key` field, a `leftChild` field,
and a `rightChild` field.
The `leftChild` field and the `rightChild` field point to other `Node` objects.
A binary search tree is a collection of `Node` objects satisfying the following *binary search tree
property:* for any node `x`, `x.key > y.key` for all nodes `y` in the left subtree of `x`
and `x.key < y.key` for all nodes `y` in the right subtree of `x`.
In a typical implementation, the only access that we have to the nodes of a binary search tree is via
the root of the tree.
Thus the only data member that is *essential* to a `BinarySearchTree` class is
a `root`, of type `Node`.

**Problem:**
Based on this description and our class discussion, implement a `Node` class and
a `BinarySearchTree` class.
The `BinarySearchTree` class should provide, at the minimum, the operations `search`, `insert`,
and `delete`.