astar.py works with gstate.py now

In swap, we were making the deepcopy but but when moving we accessed the Piece, p, that we started with.
The three move_direction methods were all accessing the same pair of BitVectors in move_tuples; for the
8- and 15-puzzles with only 1x1 blocks this didn't matter but would eventually come back to haunt us.
I changed printb() to print_bs() to conform with the earlier code (appearing also in astar and iddfs).