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).
instead of removing this line, change it to:

`virtual inline int MinTopBlobs() const { return 1; }`

this will require the layer to have at least 1 output