WIP: Masked arrays

Before I start implementing all the operations for masked arrays, it'd be great if someone (e.g. @nouiz) could let me know whether this is correct i.e. whether the files are in the correct place, whether I derived from the correct classes, etc. This is my first attempt at a PR to Theano, so I'm not sure how some things should be done.
Masks are stored as boolean arrays by NumPy, which causes Theano to give an error; it says something like `expected NPY_INT8 (num_type 1) but got num_type 0`. Hence the view as `int8` (just a view is enough because boolean values are stored as `int8` by NumPy anyway).