I implemented this at one point actually. It's not a huge difference, but noticable. For an output layer of size N you can save on a bit of computation (I think N - 1 divisions for outputs that are never used, and N - 1 multiplications of outputs that are just multiplied with zero) as well as memory (N - 1 less targets which are equal to zero in memory).

However, it gets a bit tricky in general. To be consistent, the `fprop` method should output the `argmax` in order to output an `IndexSpace`, but what if you have multiple targets? So `num_targets` should become an (optional) argument to the `Softmax` layer then I guess, which sets the output space to `IndexSpace(max_labels=dim, dim=num_targets)` when given.

But in my case, I wanted to get the full (`VectorSpace`) output layer during runtime, and I can imagine other people might want that as well (e.g. when you want to sample sentences from the LM). So the layer would need some sort of method to switch between the two output spaces (e.g. a `set_output_space` method?).

`OneHotFormatter` shouldn't be needed (and maybe it should just be deprecated?) because `IndexSpace` data can automatically be converted to a one-hot `VectorSpace` representation by doing `index_space.format_as(batch, vector_space)`.