Monitors

This is first attempt at automatic validation routine creation. I sidestepped the issue of selecting proper variables for monitoring - since the tagged theano variables carry the information on how to aggregate them, the minimal validator needs just the list of variables. Selection should be handled elsewhere.

My idea is that such a validator would be run in the training loop via a hook. Another function would save somewhere or print the computed values.

**Update:**
I added a helper class for monitoring during training. It takes a list of variables, allocates storage for them, creates a list of updates to compute and store the monitored values during a call of the training function and provides a helper function which reads out the storage as a dict.

I changed the names to be more descriptive, but I am still not too fond of them.

What is important is that the *Monitor classes are agnostic to the model (both read a list/dict of theano variables) and to the way the training/main loop runs as long as:
1. updates can be added to the training function - this is a common requirement
2. The trainer and main loop have provisions to run hooks after each batch/epoch - this again is quite easy to meet.

Storage of computed values should be done elsewhere. It will also be easy since the *Monitor classes return dicts from names (or other user-specified keys) to values.
For some experiments that might be true, but other experiments might have very variable batch sizes e.g. when sampling sequences of the same length. In this case it could be a pretty crude approximation, since outliers (very long/short sequences of which there are few samples) would get a relatively heigh weight. If you ask me, it's not up to us to decide whether this approximation is acceptable based on the assumption that most of the time an experiment will look one way or the other.