some things i'm thinking through: - alot of copy pasted for loops for properties - alot of copy pasted for checking array props - dont need the _createProtoFns to obfuscate... code is easier with independent functions