Make use of ActiveModel::Naming
Move Model key and alias checking into shared functions

These will be re-used when embedding
Documentation for error class
Add support for defining embedded relationships