Initial file checkin, most of the features don't work, the unit tests need fixing, the api doesn't yet make sense