Added styling and clicking to buttons

Hi all,

The goal was to get Button to use `style_with` and `style_init` (see #711) which was a daunting task since that meant changing the SWT side of how button works (see [this comment](https://github.com/shoes/shoes4/pull/768#issuecomment-46875574)).

`button` `radio` `check` and `link` are all very related, especially in the backend. So in order to get this to work I had to work on all 4 at the same time (thankfully, I didn't have to do too much with link).

The good news is it works! And it passes specs (well on the surface, I'll get into that in the inline comments). It also resolves #748.

The bad news is, it's A LOT to change in one gulp, and even though it passes the standing specs, I still need to write the specs that *weren't* failing.

Unfortunately I won't be able to write the inline comments for another couple hours or so. So if you're eager feel free to dig in and play around (or at the very least write some clicky apps). Otherwise I'll give more details soon enough. 

:confetti_ball: 
Hmm, I just gave that a shot and the problem is that we want `Dimensions` to handle setting of dimensions not `Style` but for some reason instead of `Dimensions` overwriting the methods (`left` `left=` etc) style is hanging onto them and causing a loop. I'm not sure why that would be the case, but here's just one (of many similar) spec that fails if I don't check for pre-defined readers and writers.

```spec
9) Shoes::Arc basic behaves like object with style merges new styles
     Failure/Error: Unable to find matching line from backtrace
     SystemStackError:
       stack level too deep
     Shared Example Group: "object with style" called from ./spec/shoes/arc_spec.rb:17
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
     # ./lib/shoes/common/style.rb:27:in `style'
     # ./lib/shoes/common/style.rb:72:in `left='
     # ./lib/shoes/common/style.rb:95:in `set_dimensions'
     # ./lib/shoes/common/style.rb:94:in `set_dimensions'
     # ./lib/shoes/common/style.rb:87:in `update_style'
```