Allow arbitrary output for HDF5 layer

modified HDF5 layer to allow arbitrary output of the layer (not only `label` and `data` any more). This is useful for example, when there are multiple stream of data, say one part of the data needs to go through convolution while the other part of the data should go directly to higher fully connected layer. In this case, people could split the dataset and store them as different "dataset" in the HDF5 file. 

Test case is also modified to cover the new behavior. The modification is backward compatible (except that now we are not constraining the dimension of the `label` dataset).
let's call this variable `dim` or `data_dim` -- it's not the count (I know this was based on the current var name, but might as well take the chance to fix now)