Add assignment achievement logging interface

Add a swappable interface for logging assignments and an achievement model. 

- The logger is just an interface that should respond to two methods: `def log_assignment(assignment)` and `def log_achievement(achievement)`.
- By default, this will log output to `Experiments.default_logger`, which is set to `Rails.logger` by the `Railtie`.
- In our case, we want to start using the new JSON based event logger @emilienoel added to Shopify this week. I will add a pull request for Shopify itself once the API of this library is OK.

Achievement is a new concept in this library. It's there to instrument your code for capturing events you are interested in for your experiment, e.g. a form submission, or successful payment. Main question: is *achievement* the best term for this? 

In the end, we want to ETL all the assignment and achievement events logged using this interface to the data warehouse, and base our experiments result on it.

Review @jamesmacaulay @peterjm, /cc @BenDoyle @bani