Reduced complexity.
Extracted method.
Some extract method.
Extracted removal method.
Refactored left/right direction processing
Further refactoring to support more generic left-right processing.
Generic promotion algorithm for directions.
usual capture generalized for directions.
Removed unused variables.
En passant generalized for directions.