Extract Behavior: Version and Change/ChangeList

There's enough logic, particularly with the Herrera\Version wrapping,
around handling the version number, that it makes sense to pull it out
in a separate class in order to separate concerns.

A Change is essentially a single item in the release notes.  Right now
the only type of change supported is a PullRequest, although more can
hopefully be added easily.  The change, besides storing the data, also
defines the output formats of the change.

A ChangeList is a small abstraction around an array of changes to help
abstract out simple behaviors like converting the list to Markdown split
up by change type.

The factory classes exist to encapsulate the logic behind creating
Changes and ChangeLists.

Because changes need user intervention (in order to specify the "type"
of the change), The change factory takes a function that performs this
selection in order to keep the UI code out of the Change "library" code.

The ChangeList factory simply wraps the change factory and uses the
github client in order to initialize it.