Spaces & Operators: Protect attributes that should not be altered after init
The user is able to change attributes that produce inconsistent results:
from nifty import *
x = rg_space((100, 100))
x.dtype = np.complex
This conflicts with
x.complexity
Solution: Protect all critical attributes with a property
decorator.