Initial commit. Tests fail because implementation not complete.