Implement Betrayal, with lots of tests