P001Model subclass registration

P001Model now registers subclasses in an internal NSSet and uses this to save some operations (only performing some things once per subclass).  We'll probably need it later on for more dynamic stuff as well.

Also, I'm using a lot more of these “«classname»_”-prefixed methods; since Apple has “_”-prefixed methods reserved for their own use and I still want some methods to be closer to private than protected, this is working out well.  I'm also using it more for class methods that should only be called on the class itself (P001Model), not on subclasses (which would most likely resolved to P001Model anyway, but the `self` pointer would be different).  On the other hand, it is somewhat wordy.  Maybe I'll scale back to “P001_” at some point.

• For registering and checking registration, added sRegisteredSubclasses static var, and P001Model_registerSubclass: and P001Model_isSubclassRegistered: methods.
• For checking a class over to make sure its inheritance chain looks okay (only abstract ancestors up to P001Model), P001Model_checkForConcreteAncestorsOfSubclass:, findConcreteAncestors, and findAConcreteAncestorStartingAt:.
• isSubclassAndNotBase helper function.
• And init now does a subclass check then calls into P001Model_initForSubclasses, which does (normal init stuff and) a registration check then calls (once per subclass) into P001Model_perSubclassInitFor:, which checks for concrete ancestors, checks and does the swizzle, and finally registers the subclass.
	» P001Model_perSubclassInitFor: seems to be the best we can do in leu of a Ruby-style `self.inherited()` method.  There could be a way to swizzle-duck NSObject or otherwise haxor the runtime to do better… but I think I'll save that for the v1.1 App Store release.

Also:
• Moved sRegisteredSubclasses and kIsDeallocSwizzledAssociationKey static/constant data things, and deallocOriginalSelector(), deallocWithModSelector(), and deallocWithoutModSelector() down into the implementation.  I'm liking these closer to the code that uses them.
• Likewise, put a dealloc_withModelWillDie declaration up in the @implementation block.
• Changed P001Model_swizzleDealloc and P001Model_unswizzleDealloc to only return NO in an error condition, so that the caller (currently P001Model_perSubclassInitFor:) can throw an error.
• Reordered some other stuff, maybe.
• Renamed deallocOriginalSelector, deallocWithModSelector, and deallocWithoutModSelector to selectorForOriginalDealloc, selectorForDeallocWithMod, and selectorForDeallocWithoutMod respectively.
• An extra `Class class` slipped into dealloc_withModelWillDie.  That's not supposed to be there.
P001ModelTests additions

• Added alloc/init test for P001ModelTestsModel and P001ModelTestsModelWithoutDealloc in P001ModelTests, so they get registered as well.
• Added the `test_step`-style stuff to P001ModelTests.
Major simplification of P001Model's swizzling

Now that we have a number of subclass checks, the ability to call alternate dealloc methods by name isn't necessary any more.

Instead, now we're using a block to lambda/unbind in the original IMP, which we call directly.

• dealloc_withModelWillDie given an `IMP withoutModImplementation` arg, which it now calls directly.
• P001Model_swizzleDealloc now wraps up the `dealloc_withModelWillDie` call adding in the withoutModImplementation, and is turned into an IMP via imp_implementationWithBlock (which is swapped into dealloc).
• All the class_addMethod stuff removed.
• selectorForOriginalDealloc, selectorForDeallocWithMod, and selectorForDeallocWithoutMod helper methods removed.

Unfortunately, this also means we don't store the original IMP anywhere explicit (we probably could, but I don't know how).  So for now:
• Removed P001Model_unswizzleDealloc.
• Removed unswizzle checks from P001ModelTests.
Merge updates from branch 'origin/feature/models-and-surrogates' into feature/puck-dynamics