Ignore cabal sandbox
Split logic into separate modules.

- This is done mostly to allow developing the bolts and spouts logic
separately. However, to avoid circular loops, many small files also
had to be extracted to separate files.

- I've tried to keep data structures in separate files as far as
possible/reasonable.

- Bolt logic needs to be added to Processor.hs (still working on it).

- TODO: sample runner requires major refactoring.