Array attribute relations

took #3918 and added tests for elasticsearch.
Tests are only failing because of #4379.

@qiangxue what do you think? Imo this is good to merge.

fixes #1249, closes #3918, fixes #4379
`multiple` is used to indicate if it is `one()` or `all()` call. So basically the use case is you have an array valued attribute and you are calling `one()`. I don't know if this makes sense or not. Will this cause PHP error?