Prior to the refactoring in 112b16f, this would silently succeed
despite invoking a method on a null |this| because of an early
return prior to touching member variables. This restores that
old behaviour.

The changes pulled from third_party/skia's SkUserConfig.h mostly are
comments and formatting, and should have no effect.

There were a few changes that could have an effect: The definitions for
SK_SUPPORT_UNITTEST, SK_DISALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS, and
SK_USER_TRACE_INCLUDE_FILE were dropped. There are no references.

There are some formatting differences from third_party/skia's
SkUserConfig.h, such as an extra space after "//", in order to make the
linter happy.

One exception: I kept the original order for the SkPreConfig.h,
SkUserConfig.h, and SkPostConfig.h includes, which only make sense in a
specific order (and are just comments anyway).

- Move some trivial getters to .h file.
- Remove one unused constant.
- Move the other constant into the only file that uses it.
- Prefix with g_ so that it is clear that the eventual |delete|
is operating on a global and can't be a smart pointer instead.

Modify tagged_alt_text.pdf and its source file to add a title with
UTF-16BE encoding. Then enhance FPDFStructTreeEmbedderTest to read out
the value. To make the test pass, get the title from its dictionary as
Unicode text instead of a ByteString.

Also change CPDF_StructElement to stop storing the title, and get the
value from the dictionary directly in its GetTitle() method as needed.
Along the way, further make the code more consistent by removing
checks that assume CPDF_StructElement::GetDict() can return nullptr.

- Clarify in the documentation that the buffer length is in bytes.
- Change callers to use containers of FPDF_WCHAR instead of char.
- Change callers to avoid casting.
- Use GetFPDFWideStringBuffer() to help create std::vector<FPDF_WCHAR>
without having to byte length to FPDF_WCHAR count conversions.

In 93101066, I assumed a public_fuzzer didn't depend on private PDFium
code, however this is not true. Some public_fuzzer's have direct
dependencies on PDFium internals. So in component builds, they will
both statically link in parts of PDFium, and dynamically link in (the
same code from) libpdfium.so. The fix is to export the public fuzzers
from libpdfium.so too.

pdfium_fuzzer_helper.cc contained both logic for public fuzzers, and the
static initalizer for setting up pdfium. So the fuzzers have a
dependency on pdfium_fuzzer_helper.cc, but in component builds, they get
linked into libpdfium.so. We want to avoid adding the static initializer
to libpdfium.so, otherwise pdfium will get statically initialized
everywhere.

This is necessary to prevent targets like test_support from depending
on pdfium. test_support depends on pdfium internals, so should not
depend on pdfium when it's a shared library because of ODR violations.

With this change, the dependency on pdfium can be removed (in a followup).

Removes some add-hoc refcounting in favor of smart pointers. The
combination of Retainable and Observable creates a cache entry that
remains valid so long as there is at least one retain ptr outstanding.