Changes:
* Rewritten move generator, various performance tweaks, code simplications
(500 lines removed) amounting to **doubled PGN parsing and perft speed**.
* Removed `board.generate_evasions()` and `board.generate_non_evasions()`.
* Removed `board.transpositions`. Transpositions are now counted on demand.
* `file_index()`, `rank_index()`, and `pop_count()` have been renamed to
`square_file()`, `square_rank()` and `popcount()` respectively. Aliases will
be removed in some future release.
* `STATUS_ILLEGAL_CHECK` has been renamed to `STATUS_RACE_CHECK`. The alias
will be removed in a future release.
* Removed `DIAG_ATTACKS_NE`, `DIAG_ATTACKS_NW`, `RANK_ATTACKS` and
`FILE_ATTACKS` as well as the corresponding masks. New attack tables
`BB_DIAG_ATTACKS` (combined both diagonal tables), `BB_RANK_ATTACKS` and
`BB_FILE_ATTACKS` are indexed by square instead of mask.
* `board.push()` no longer requires pseudo-legality.
* Documentation improvements.
Bugfixes:
* **Positions in variant end are now guaranteed to have no legal moves.**
`board.is_variant_end()` has been added to test for special variant end
conditions. Thanks to salvador-dali.
* `chess.svg`: Fixed a typo in the class names of black queens. Fixed fill
color for black rooks and queens. Added SVG Tiny support. These combined
changes fix display in a number of applications, including
Jupyter Qt Console. Thanks to Alexander Meshcheryakov.
* `board.ep_square` was not consistently `None` instead of `0`.
* Detect invalid racing kings positions: `STATUS_RACE_OVER`,
`STATUS_RACE_MATERIAL`.
* `SAN_REGEX`, `FEN_CASTLING_REGEX` and `TAG_REGEX` now try to match the
entire string and no longer accept newlines.
* Fixed `Move.__hash__()` for drops.
New features:
* `board.remove_piece_at()` now returns the removed piece.
* Added `square_distance()` and `square_mirror()`.
* Added `msb()`, `lsb()`, `scan_reversed()` and `scan_forward()`.
* Added `BB_RAYS` and `BB_BETWEEN`.