New mlp convolutional layers

My previous PR is messed up (because of a merge) and I decided to open a new PR. This one is a bit more generic. I also put Ian's comment for about what this PR is trying to accomplish:

I feel like we're getting into a lot of code duplication. Why not make something like ConvElemWise layer and have it take a ConvNonlinearity instance as an argument? Then make a Rectifier ConvNonlinearity subclass and a Sigmoid ConvNonlinearity subclass. If you like you can make convenience functions to allocate nets with these non-linearities. As it is I feel like we're copy-pasting way too much stuff. If we ever find a bug in any of this it's going to be a pain to make sure we fix it in every copy.