Add support for optional icon to `Button` (#3479)

This PR extends `Button` with support for an optional icon to be
displayed next to the label.

As part of this, the functionality for displaying an icon within a
button has been factored out into an internal `ButtonIcon` component.
`ButtonIcon` is now used by both `IconButton` and `Button` to
encapsulate the concerns of an icon that is rendered within a button.

Release Notes:

- N/A
c3e7732eabMarshall Bowers committed on 12/1/2023, 7:30:38 PM· committed by GitHubparent4b23c5c
5 files changedLine totals unavailable