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.
I do not agree. If I am a user and I want to quickly add something to monitoring, per-batch averaging would suffice for me. Moreover, if I have in my experiments batches of fixed size (happens quite often), I can divide the value I want to monitor by this batch size.