Significant work to improve both the internal architecture (using auto-layout to handle some of the geometry) and increase the user experience.

USER-FACING IMPROVEMENTS:

- A cell can now have its utility buttons revealed while it is in a selected state.

- The UITableViewDelegate method tableView:shouldHighlightRowAtIndexPath: is now called (to suppress touch highlighting and selection if implemented and returns NO).

- The return value from the UITableViewDelegate method tableView:willSelectRowIndexPath: is now respected (to disallow selection or target a different row; previously ignored).

- Selection/deselection behaviour is now more consistent, and akin to UITableViewCell, whether invoked as a result of a tap or long-press gesture.

- Maximum width for utility buttons is now determined dynamically according to the cell's size, and also updates itself automatically (e.g., in response to an orientation change).

ARCHITECTURAL IMPROVEMENTS:

- Re-worked much of the view geometry to use auto-layout (in particular, management of the utility button views). This allows some automation and increases flexibility.

- The utility button views are now created only once at init time, and can be re-populated ad nauseam at runtime with no ill effects.

- The init time reshuffling of subviews has been minimized; now the existing contentView is preserved as-is, and simply moved into our custom scroll view.

- Removed several property setters whose values are now derived automatically: height is inferred by auto-layout; containingTableView is determined in didMoveToSuperview; backgroundColor now works again with superclass implementation; appearanceBlock is no longer necessary.

- Simplified and consolidated redundant logic in several places, particularly in scrollViewWillEndDragging:::.

- Cleaned up some of the interface for improved style (public vs. private properties and protocols, clarity in naming of properties and methods, etc.). Also moved the constants declared in SWConstants.h to the appropriate files for semantic locality.
Deselect now is not animated like selection already is