Code cleanup/modernization

Use `instancetype` instead of `id` in constructors, allow the compiler to auto-synthesize properties' backing ivars, etc.