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.
In general I like the idea, but I wouldn't want the user to edit tags himself. I'd prefer `ApplicationCall`'s `add_monitor` method to take the `averaging_method` as an argument instead (that way we can do error checking). Also, do we really need a new class for `ArithmeticMean`? Can't we just pass `numpy.mean`, `numpy.max` as functions? Basically, the user is just expected to pass a function which takes an array as input and output.

Also, `averaging_method` seems a bit of a bad name, because if we want to take the maximum or minimum, we're not averaging anymore. I guess something like `reduction_method` would strictly be more correct, although it sounds a bit abstract.

Agreed on the targets.