Changed the way @is_cacheable is set and works. Instead of using nil as a special value, the variable must be completely unset. The setter also forces the value to true or false. This makes the intent clearer.

The private _is_cacheable? method is now public and renamed to is_cacheable_by_default?
Cleaned up the comments for better RDoc formatting.
More consistency changes.
cache_options can now be set explicitly on a dataset.