Add test cases for #in? and #presence_in
Remove deprecation warning
rm cached attributes

The original patch that added this concept can be found
[here](https://web.archive.org/web/20090601022739/http://dev.rubyonrails.org/ticket/9767).
The current default behavior is to cache everything except serialized
columns, unless the user specified otherwise. If anyone were to specify
otherwise, many types would actually be completely broken. Still, the
method is left in place with a deprecation warning in case anyone is
actually still calling this method.
Merge pull request #15637 from akshay-vishnoi/delete-deprecated-method

Remove deprecation warning
Merge pull request #15628 from akshay-vishnoi/test-cases

Add test cases for #in? and #presence_in
Add has_one? docs [skip ci]
Merge pull request #15641 from arthurnn/small_doc_add

Add has_one? docs
Merge pull request #15429 from sgrif/sg-rm-cached-attributes

rm cached attributes
Introduce an Attribute object to handle the type casting dance

There's a lot more that can be moved to these, but this felt like a good
place to introduce the object. Plans are:

- Remove all knowledge of type casting from the columns, beyond a
  reference to the cast_type
- Move type_cast_for_database to these objects
- Potentially make them mutable, introduce a state machine, and have
  dirty checking handled here as well
- Move `attribute`, `decorate_attribute`, and anything else that
  modifies types to mess with this object, not the columns hash
- Introduce a collection object to manage these, reduce allocations, and
  not require serializing the types