Make NSCoding implementation  always encode properties to NSData, and de...

`encodeWithCoder` would use `remoteAttributes`, which, in some rare scenarios (manually changing properties on an object) would not be accurate.

More importantly, `initWithCoder` would set the `remoteAttributes` but not use them to set the properties of the object.

I've included tests, and they should have good coverage!

Open to critique on general coding style or anything else!