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.
Well, that's a fun Theano bug indeed.

Re: intX, in numpy C code it is common to use npy_intp where we need
whatever integer is large enough to store an offset into a numpy array on
that platform. Maybe we should have "intp" as a valid alias dtype, that
defaults to whatever npy_intp is (I think numpy defines a dtype object for
it in Python land, even).