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.
Are you're copying all prototype attrs down to the instance so that they can be accessed by Object.defineProperty? 

I think this is unnecessary. Objects defined on the prototype can't be easily mutated by the instance (not without __proto__ pr prototype.constructor anyway - which would be a pretty obvious hack) so I don't think they need locking.

In any case, even with this safeguard, a dev who know what they're doing can still delete a writable false property on the instance and then have it access the (unlocked prototype) object directly (see https://gist.github.com/angus-c/ed3607792e4ec02285a3)