Initial stab at attribute immutability

Got this working end to end.  Implementation is a bit weird because if you want to lock the property you need to copy all the prototype inherited properties up to the top level in order to lock them predictably.

However, its a debug time only thing so Im not too worried about it.  Suggestions welcome though.  Im sure Im missing some details here.
@angus-c It is necessary to lock them because otherwise people can set a new value that wont change the prototype but will change it for that instance and if you dont copy the properties to top level before you lock them then they return null.  

And yeah, you can totally get around it if you want to but indicating the right thing to do is enough I think.  If you want to to break it you can but then its your fault.