Completed Section 12, "Introducing the Exhibit Pattern".

Only we're not using Avdi's bespoke Exhibits to render partials, we're
using Draper model decorators to generate markup for Posts with or
without images, providing a single method on the decorated model to be
called from the view.

One buglet is that a more laborious process to decorate a model instance
is needed when using `active_attr` for models rather than Rails' genuine
`ActiveRecord::Base`; see https://github.com/drapergem/draper/issues/619

Highlights:

* `PostDecorator` class has a method, `#build_body`, that corresponds to
   Avdi's `PicturePostExhibit#render_body` and
  `TextPostExhibit#render_body` methods;
* Support classes that do the actual work for `PostDecorator#build_body`
  are in the `app/decorators/post_decorator` subdirectory;
* New common base `ApplicationDecorator` does nothing for now;
* `PostController#build_post_for_retry` "knows" about the image URL;
* The `Post` model has a new `:image_url` attribute;
* The `CreateAndPublishBlogPost` Mutator has been reworked to accept
  parameters for either an image or text post. The new `:image_url` and
  the existing `:body` post parameters are both now marked `optional`,
  with the `#validate` method figuring out what combination is actually
  required;
* The `_entry` partial for the blog index view now calls the new
  `build_body` decorator method rather than outputting the raw `body`
  attribute as previously.
* The `_entry` partial also has a FIXME in that the entry being rendered
  is decorated there, explicitly. This is NOT good style;
* The `new post` template now has an 'image URL' field;
* The Gemfile, in addition to including the Draper Gem, also includes an
  `indefinite_article` Gem. This lets us not have to care whether an
  individual item in text output should be "an item" or "a thing"; just
  pass in the noun and let the Gem figure out which is which;
* And specs for all the above, of course.

RSpec: 135 examples, 0 failures
Script: 0 tests: 0 failures, 0 errors, 0 pending, 0 omitted
RuboCop: 46 files inspected, no offenses detected
RuboCop global overrides in `.rubocop.yml`: 3
RuboCop local overrides in our source/spec files: 3