Use Virtus for attributes

This sort-of depends on [this pull request](https://github.com/solnic/virtus/pull/181) that will cause Virtus to call our initializer. Until that time, I've added a monkey patch that fixes the behaviour for the current release. This patch is locked to the specific version that needs it.