Use (NullSpace(), '') for empty data_specs.

`data` arg of `Cost.expr` (and other methods) should be valid according
to the space, not a flat tuple.
Do not pass flat tuples to Cost as data, use data_specs
Add string representation for spaces
Make TransformerDataset work when 'features' is not required
Add Model.get_monitoring_data_specs()

This method returns the data_specs that has to be passed to the channels
returned by Model.get_monitoring_channels()
Update data_specs utils to handle NullSpace and tuples
Update monitor.setup to feed the right data to channels
Update sgd to correctly handle flat/nested args
Make cost.get_fixed_var_descr take data formatted as get_data_specs

The methods in on_load_batch too will take numeric values corresponding
to the same data_specs.
Update BGD to use Monitor.setup(), and new way of handling fixed_descr
Define the batch size of NullSpace as 0, make CompositeSpace ignore them
Call accum fns only once if no data is needed.