Initial commit, moved from shapeless-contrib