styling helper that supports composite styles and caching

Summarized in the 'Styling' section in the README.md file. I'm pushing this out for review... it would need tests, and improved documentation, but I wanted to see if this is helpful to others.
Actually, the typo is in the name of the method. It should be:

```
def styles
  {
    basic: {
      ...
```

and then the part on line 190 is correct:

```
  style: style(:basic)
```