Extract bulky logic from AbstractEntity::__call

## Extract bulky logic from AbstractEntity::__call

### Acceptance Criteria
1. Magic `__call` method has bulky logic which determines the type of method being called and what property is being referred to. This logic is extracted out into separate protected methods so children can override `__call` without reproducing the bulky logic.