[WIP] (denoising) auto-encoder

denoising auto-encoder (for part of #29)

* [x] `RandomMaskLayer`
* [x] ~~Add option for a inner-product layer to have *tied weights* with another inner-product (i.e. W1 = transpose(W2))~~
   * This does not work because unlike normal Inner-product layer with shared parameters, the reconstruction layer in an auto-encoder
      * has different bias even though the weights are shared
      * do **not** do learning on weights (while layers with shared parameters all do learning and accumulate gradients for the parameters)
* [x] Add `TiedInnerProductLayer` to act as reconstruction layer for auto-encoder