Added caching of generated layout frames

The goal of these changes is to have the DTCoreTextLayouter cache generated layout frames for a given string, range and frame. This way layout for e.g. DTAtt
ributedTextCells is only done once per width. i.e. twice for portrait and landscape. The same cached frame will also be used for the suggestedFrameSizeToFitEntireStringConstraintedToWidth of DTAttributedTextContentView.

In short suggestedFrameSizeToFitEntireStringConstraintedToWidth now creates a temporary rectangle which is the bounds inset by the edgeInsets and height set
 to open-ended. As long as you don't change the frame the same layoutFrame can be reused. Caching occurs in DTCoreTextLayouter, as generally one layouter = one attributed string.

This should fix #284 - not wrapping correctly for plain style. I changed the demo to use plain style and it wraps ok.
It should also fix #237 since the requiredRowHeightInTableView now always uses the same layoutFrame as the cell will use later on
Finally it also deals with one aspect of #102 as caching the layout frame allows for efficient getting of the needed frame.

The final piece to solving #102 is to remove the super.frame from -relayoutText in DTAttributedTextContentView. This method is called if:

- width or height changes and the matching relayoutMask is set
- a new attributedString is set
- new edge insets are set (note though that when using DTAttributedTextView now the scrollView contentInset is used instead

I imagine that the contentView might send a notification if relayoutText occurs to be able to adjust the contentSize and adjust the content view height to match. The second scenario would be to manually call sizeToFit if you want to get a view that matches its contents perfectly.