Move board manipulation code to Board class.

- Board constructor reads in blocks of text and stores them internally
- find_best_target, solve, validate now methods of Board
- Print function replaced by __str__ implementation
Add argparse code to take input file as argument.
Increase code readability.

- Added comments, changed some variable names, and split some lines