This is far from complete, but has the basic structure and concepts implemented. The remainder is just fill in the blanks, and testing.