Allowing model targets to be in a different space from model outputs

In response to: https://github.com/lisa-lab/pylearn2/issues/1004

When returning data_specs, DefaultDatasetMixin and get_monitoring_data_specs now call get_target_space instead of get_output_space. The base model class's get_target_space defaults to get_output_space unless the model has specified the _target_space attribute.

Softmax now has 2 new inputs: binary_targets and target_dim which allow the user to have a softmax with IndexSpace targets. This saves a lot of computation time not transfering and multiplying one-hot vectors.
So apparently theano optimization in some cases results T.arange to return garbage. And adding dtype to T.arange will fix it.
I don't like the idea of hardcoding int32 or int64 in the code. Perhaps we can add a config.intX to pylearn2 like theano's floatX to fix this issue.