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.
I will try to put my 2 cents in this hot discussion.

First of call, this pull request does not yet specify any particular way of attaching an aggregation scheme and I hope @bartvm is fine that we have pushed these changes.

Second, I think @janchorowski  tries to address an important application: it is indeed very painful to aggregate different quantities over several batches of varying size. Even if my batch size is the same: what if I want to monitor let's say the ratio between number of opened and closed gates? To do it correctly I should use an aggregation scheme.

I do not think that it would clutter the framework too much: the implementation amounts to allowing the `Monitor` (or whatever it is called) to ask the `TrainingAlgorithm` (or whatever it is called) to do some updates at every iteration. We need this anyways to monitor the gradient norm and things like that.

I would changes the interface though, it is enough to have two methods:

* `reset` to flush all the accumulators
* `get_updates` - returns the set of updates to be done at every training iteration to keep accumulators consistent