Add ability to get and set pieces on the board

Note that the setting pieces on the board currently always puts them on
the bottom row.
Change the board model to be of variable size
Add Model._set_piece_at_opening and split out _validate_opening
Implemented Model.drop_piece