Refactor virtual attrs

Refactor virtual attributes

## important

virtual_attributes option changed to Hash from Arrray

Example
```ruby
  lou_opts = { virtual_attributes: [{ company_id: { joins: :companies } }] }

  # Changed to

  lou_opts = { virtual_attributes: { compay_id: { joins: :companies } }}
```

Also

* extend spec to cover more scenarios
* renaming for clarity
* other clean up and refactoring especially in Search class