support for non-copyable structs

This PR shouldn't remove old AA, I think. It should only add new implementation, independent on old AA. All breaking changes should be in the next PR.