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.
The thing here is that `self.mask_ttype.is_valid_value(x.mask)` will return `False` because `x.mask.dtype = bool` while `mask_ttype.dtype = int8`. Can I do `self.mask_ttype.is_valid_value(x.mask.view('int8')`?