Maven conversion

Previously, the project used Gradle for building itself.  This change
converts the project to use Maven instead.  This is because the Maven
tooling for IDEs is more robust and will result in lower overall
configuration.
Merge branch 'maven'
Database Migrations using Flyway

Previously, database migrations were written using YAML and Liquibase.
This change updates the project to use SQL-based migrations and
Flyway, the preferred migration tool for Spring Boot applications.
Domain Model

This change updates the domain model to better follow the "Design for
Extension" principle.  It does this by correctly identifying what
should be final, preventing extension.  It also properly labels fields
as volatile to ensure visibility across threads.
Repositorites should be JpaRepositories

Previously, the repositories were all CrudRepositories.  Because this
implementation uses JPA, it's good to have the JPA specific methods
available to the users of the repositories.  Making the repositories
JpaRepositories makes this possible.
Controller Constructor Injection

Previously, the controllers used private field dependency injection.
This choice meant that testing was effectively impossible.  This
change updates the controllers to use constructor injection and allows
a test class to be written.
Controller polishing

This change cleans up the controllers a bit.  The biggest change was
creating an OpenMatchFinder support class.  This class is not a
controller, not repository, and not a domain model, and therefore is
unique within the system.  It demonstrates how Spring can both wire
and use for wiring, arbitrary classes within an application.
Merge branch 'spring'