Remove all `batch_*`-related code

Remove all `batch_*`-related code, since the `PlacementGrid` now
maintains a list of `SwapContext` instances, in the order they were
applied, where each `SwapContext` contains a `block_positions` member,
which contains the position of each block before the context's swaps are
applied.
Add previous/next methods to PlacementController

Add `previous` and `next` methods to `PlacementController` class.  These
methods step backwards and forwards through the saved `SwapContext`
states.  If the last `SwapContext` in the
`PlacementController.swap_contexts` list is active when `next` is
called, create a new `SwapContext` and request an iteration from the
remote `ModifierController`.

Add `goto`, `home` and `end` methods to `PlacementController` class.
The `goto` method takes the index of the desired `SwapContext` instance
in the `PlacementController.swap_contexts` array.  The `home` and `end`
methods change focus to the first and last `SwapContext` instances,
respectively.

Assign the following shortcut keys:
    `home` -> `PlacementController.home`
    `end` -> `PlacementController.end`
    `space` -> `PlacementController.next`
    `n` -> `PlacementController.next`
    `right` -> `PlacementController.next`
    `p` -> `PlacementController.previous`
    `left` -> `PlacementController.previous`
Reuse current SwapContext when appropriate

If current `SwapContext` does not have any swaps assigned to it when a
new `SwapContext` is about to be created, reuse the existing
`SwapContext` rather than creating a new one.
Display tables containing swap context info
List most recent swap context info at the top
Add skipped/total counts to swap context info
Iterate through swap context key/value info pairs

Iterate through swap context key/value info pairs to generate swap
context detailed info tables.

Add `select` button beside each swap context listing.  When this button
is clicked, go to the corresponding swap context state.