ENH: .equals for Extension Arrays
- [x] closes #27081
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

--- Jan 3 10:00 PST

Hey team,

Looking for a bit of feedback on this API design and appropriate testing for this PR before I get too deep into it. Could you provide some guidance regarding how to appropriately handle updating this test? https://github.com/pandas-dev/pandas/blob/6f03e76f9d47ecfcfdd44641de6df1fc7dd57a01/pandas/tests/extension/base/ops.py#L162 It appears to contradict the issue #27081.

Appreciate the help,
Dave

thanks for your contribution! @dwhu 

in general here, if it is `NotImplemted`, and you implement some new functionalities, you could remove this one, and replace it with the corresponding tests to test your new implementations!

Good luck! and hope this helps > in general here, if it is `NotImplemted`, and you implement some new functionalities, you could remove this one, and replace it with the corresponding tests to test your new implementations!

@charlesdong1991 - Sounds good. Thanks for the feedback. Wanted to make sure I wasn't missing something or breaking a behavior contract by adding this behavior.
 @dwhu looks like CI is red - can you take a look and fix up the merge conflict? Closing as I think this has gone stale but ping if you'd like to pick back up. Thanks! @dwhu I am going to look into further updating this, if that's OK with you OK, I updated this with the following things:

- Made `__eq__` into an abstract method so it is required to implement (another option could be to `return NotImplemented` as default, but that's actually wrong, as it results in not doing element-wise comparison for `EA == EA`, but just returning False)
- Fixed the `equals` imlementation: it became a bit longer to ensure we check for BooleanArray (if the `==` comparison returns a nullable boolean array, we need to fill NAs with False)
- Added `ExtensionBlock.equals` (overriding the base Block method) to ensure we dispatch to the new EA method
- A bit of clean-up of the tests

Should be ready for a new review now @TomAugspurger @jbrockmendel  @simonjayhawkins how do I solve this typing error?

```
pandas/core/arrays/base.py:338: error: Return type "Union[Any, ExtensionArray]" of "__eq__" incompatible with return type "bool" in supertype "object"
```

So our annotation of `__eq__` is incompatible with the base "object" class, but we do this on purpose. So is there another way to solve this than to suppress the error in some way? Any more comments on this PR? will look soon @jreback you wanted to take a look here? Travis failures are unrelated (network issues, S3)