Refactor Board & Piece

Back when I initially refactored this project, I ended up having to make Piece an inner class of Board because I didn't know you didn't need a complete type for references. As a result I designed everything to work under the assumption that Piece was internal to Board.

Unfortunately we now need to split them apart. In this PR my goals are to:
- Move Piece out of Board (done)
- Make Board and Piece not `friend`s with each other (current)
- Implement Interactions to support both Castling and Promotion
- Check/checkmate
- Anything else as discussed below

Please look over the changes with each commit and comment on what you think needs to be changed.

@ResidentBiscuit I assigned you to this PR since we're letting Thumper relax for a while.