- renamed `DEFAULT_PIECE_ID` -> `DEFAULT_ID`
- renamed index functions
- `X()` -> `index_x()`
- `Y()` -> `index_y()`
- `ROW()` -> `index_row()`
- `COLUMN()` -> `index_column()`
- replaced use of `None` in method arguments and returned values with explicit constants
- ie. `BoardGraph.neighbor()` now always returns `int` and instead of `None` it
returns `Config.NO_POS`.
- this makes APIs easier to use and pybind11 bridge more efficient (because pybind11
doesn't need to handle `None`)
- simplified `PusherStep`
- signaling box movement is now done by single attribute, `moved_box_id`
- added explicit constant for "no piece ID is present" situations (`Config.NO_ID`)
- improved docs and tests, mainly on the front of exceptions
- fix: in many places we now check for negative values and raise early
- having ie. negative board width not only makes no sense, but is completely
impossible to pass into C++ layer where board with type is strictly defined and
is using unsigned integer