Brick inputs and outputs are tagged with an application call

The application call can be used to e.g. include auxiliary variables, such as monitors, extra cost terms etc.

Also: fixes to graph parsing.
All tests are run consecutively in the same program. Variables don't cary over because of their scope, but changing a class variable in one test (i.e. `Brick.lazy = True`) does carry over between tests.

My preferred method would be to set `Brick.lazy = True` back to its default at the end of tests which changed it. This way we don't rely on a particular order of tests for things to work.