BUG: fix IntegerArray astype with copy=True/False
xref https://github.com/pandas-dev/pandas/pull/34307#discussion_r443370993

Right now, we were not copying the mask correctly with `copy=True`, and also not when the data was actually copied (then the mask also needs to be copied, even with `copy=False`)
One additional API question that pops up: in numpy, `astype(.., copy=False)` seems to return itself if it doesn't need to copy (I am actually also relying on this in the `if data is self._data` check).  
But in the EA implementation, we always return a new array *object*, potentially with the same backing data. But we could in principle also do something like `if dtype == self.dtype and not copy: return self` (and that should already catch the one case where a copy can be avoided I think, and we could simply always copy in the other cases) > Does this need a whatsnew, or is it only on master?

Not only master it seems, will add a whatsnew. I don't have a strong opinion on returning a new object backed by the data vs. just returning `self`. Any preferences on what I do with `copy=False`? (returning a new object vs returning self)  Matching NumPy (returning the same object) seems OK. Updated to return same object lgtm, does this need a whatsnew? e.g. changed in 1.1? Added a bug fix note thanks @jorisvandenbossche 