P001ModelTestsModelWithoutDealloc had a dealloc— Oops.

Turns out that P001ModelTestsModelWithoutDealloc always had a dealloc method, matching P001ModelTestsModelish's functionality exactly.  That was kind of dumb.

• `dealloc` removed from P001ModelTestsModelWithoutDealloc.
P001Model: Smarter dealloc swizzling

The previous implementation had a bug that would cause P001Model's dealloc to get swizzled if the subclass didn't have its own dealloc.

• Uses `class_replaceMethod` instead of `method_setImplementation` so that the method is added if it doesn't exist and replaced if it does.
	• Minor: Since we're no longer using a Method struct for another else, now also uses `class_getMethodImplementation` instead of `class_getInstanceMethod`.
• Fixed the block arguments; blocks only have one extra special argument (`self`), not two (`self`, `_cmd`).
	• Reinstated kMethodTypeEncoding.
• Also, changed my naming scene a bit for clarity (since we have two types with different usage semantics sharing a single variable type):
	• All variables storing IMPs (function pointers with the first two args of `id self, SEL _cmd`) now end with `_IMP`.
	• All variables storing Block IMPs (function pointers with the first args of `id self`) now end with `_BlockIMP`.

Lastly:
• Added a half-ass testModelAndModelWithoutDeallocInitializationAndSurrogate to check for that “Warning: Instance is (already) dead; aborting.” message (although the test won't fail, and checking for failure probably isn't feasible without using something with stubs and mocks like Kiwi).
Better P001Model “concrete ancestors” error message

• Now displays the list of concrete ancestors as a comma-separated list, rather than a plist of an NSSet.
• Created an NSSet+SDTAdditions class extension to convert an NSSet into a comma-separated list with one step.
Error message when trying to init an abstract class

The swizzling within P001Model_perSubclassInitFor: was guarded against affecting non-model classes, but it still possible to init one (if the class itself didn't throw an error in its init), which would cause a P001ModelSurrogate to die within usingInstanceHandleInvocation:.

• P001Model#init now checks `[[self class] isModelClass]` and throws an exception if not.
• Minor: Tiny cleanup in isSubclassAndNotBase; stores `classfor(P001Model)` in a baseClass local var.
Merge updates from branch 'feature/models-and-surrogates' into feature/puck-dynamics