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.
It's more of a demonstration of how one could deal with monitoring through hooks. 

You are right that it is for the future. What do we do with it: drop, split for another PR that will hang until we reach the future point? I think that having such code is important because we should aim for the same future and not waste too much efforts on stuff that we will not want in the first place. Also, @bartvm has already written another proof of concept for this and we have to settle one day on one, this can be useful then.