Have AR::Base#[] act consistently for non-existent attributes

Currently we have an inconcistency between calling `[]` for columns that
exist but were not included in the query, and accessing columns which do
not exist.

    class Author < ActiveRecord::Base
      connection.create_table(:authors, force: true) do |t|
        t.string :name
      end
    end

    author = Author.select('id').first

    # Before:
    author[:name] # => Raises ActiveModel::MissingAttributeError
    author[:non_existent] # => nil

    # After:
    author[:name] # => Raises ActiveModel::MissingAttributeError
    author[:non_existent] # => Raises ActiveModel::MissingAttributeError

Personally, I think it'd make more sense for `[]` to return nil in all
cases, but the documentation states that "It raises
`ActiveModel::MissingAttributeError` if the identified attribute is
missing." so we cannot do that at this time.
"We have a non-standard pk" seems to have gone missing in this conditional? In fact, even with that condition, shouldn't the below call to `read_attribute` pass on our block?