First cut at move generation