* Added support for extended properties to `Filter`. Unlike the basic
properties, which allow the caller to specify a list of acceptable values, the
extended properties only supports a map of properties, all of which must be
available on the issue and match the given value.
* Made `Issue` a concrete class. There was no reason it could not be a concrete
object. The main difference is that the extending classes all add some sort of
persistence to the issue, but having an in-memory `Issue` in its most basic
form can be useful and should be allowed.
* Changed the default priority for new issues from 9 to 5.
* Bug fix on `FileIssue.formatIssue()`. If was not properly returning its
result leading to failure if no extended properties were given.
* Reworked `FileIssue.formatIssue()` to only print the horizontal rule
seperating the issue text from the extended properties if there are extended
properties to print as well.
* Changed the `FileProject.createNewIssue()` to handle extended properties and
handle the basic properties in a manner more consistent with `Issue`. It is
now creating an `Issue` object and using the `FileIssue.formatIssue()`
function to write that to a new issue file, then loading that file back in as
a `FileIssue`. This cuts down on code duplication and makes it so that the
options map that `FileProject.createNewIssue()` expects is the same as the
options to the `Issue` constructor.