BControlLook::DrawLabel(): Fix off-by-one error

* BFont::TruncateString() expects a pixel count (as opposed to a pixel
  distance). That would cause a tightly fitting string to be truncated.
* Round the result of StringWidth() to avoid drawing at a non-integer
  location.
BCheckBox: Add icon support

* Draw(): Remove the non-BControlLook code.
* GetPreferredSize(): Implement based on _ValidatePreferredSize() to
  avoid code duplication.
* Draw(): Fix off-by-one error. The label was too close to the box.
* Draw(), _ValidatePreferredSize(): Add icon support.
  _ValidatePreferredSize() is now actually aligned with what Draw()
  expects. The preferred width is now a tight fit; there were three or
  four pixels of empty space before.
  Due to the fixed check box position the layout isn't that nice in
  some situations (particularly with an icon larger than the text),
  IMHO.