libshared: Introduce JSON parser and MessageBuilder.

Based on an earlier piece of source code of mine that parsed JSON into
QObjects, this JSON parser creates a BMessage tree.

Will be used by Stephan in HaikuDepot for communication with the web app.
Json: Don't force someone including to use BPrivate.
MessageBuilder: Fix init order to match header.
MessageBuilder: Fix leaking BMessages.

The initial message is not deleted, since the current message is not
on the stack.
MessageBuilder: Fix potential leaks in PushObject().
MessageBuilder: Whoops, stringDeleter must be detached when adding succeeded.
PackageInfo: Added setting rating summary before any ratings are known.

Fleshed out RatingSummary.
HaikuDepot: Use JSON parser provided by Augustin to parse response.
HaikuDepot: Fill some categories and rating summary from web app response.

This still uses the request I had prepared earlier, not the new bulk
request which can get information for the entire package list in one
request. It also has no caching, so it runs for quite a while in the
background (dedicated thread, so hopefully no harm done by keeping it
enabled).

Thanks Augustin, for the parser!
libshared: fix x86_64 build
acpi_button: Fix several issues with multiple devices.
- On some hardware, both the fixed function FADT as well as the
  device-based power interfaces are present. In such a case we
  would fail to publish one or the other, depending on which was
  enumerated first, since we'd always attempt to publish the same
  name regardless. Now we differentiate the device name for fixed vs
  device.
- Only enable fixed function for actual fixed devices.
- Improve tracing.
power_daemon: Refactor to handle multiple exported power devices.

- Each PowerMonitor now exports a set of descriptors rather than
  only a single one. This allows e.g. PowerButtonMonitor to watch
  multiple possible button event sources rather than one.

This gets power button working again on some hardware that exports
multiple ACPI power buttons, but offers no obvious way to determine
which one is actually active/being used. In the long term though, it'd
be nice to have a well-defined kernel power event interface that an app
could subscribe to, rather than having to watch individual devfs
descriptors.

Thanks to tqh and korli for advice/review.
dvb.media_addon: Support dumping of the raw mpeg ts data.

- Main purpose is to debug a/v synchronization issues by playing the dumped
  mpeg ts data in alternative video players (like ffplay or MediaPlayer) and
  see how those behave.

- The commit diffs shows some coding style violations (max. line length) that
  show up throughout the whole DVBMediaNode class. Those will be fixed in the
  next commit to keep a clean separation between the different code changes.
dvb.media_addon: Fix some coding style.

- Fix max line length, switch statement style and some pointer comparisons in
  if statements. No functional change intended.
  Note: There may be more coding style violations lurking.
FFMPEG Plugin: Refactor out copying of audio format properties.

- Main reasons for this refactoring of negotiation steps are to increase
  readability and to be on par with the video path.

- Rearrange some negotiation steps in video path to be on par with audio path.

- Add documentation for the new method and update existing documentation
  accordingly.

- No functional change intended.
FFMPEG Plugin: Implement audio input buffer padding.

- Padding is required by FFMPEG for correct operation of all audio decoders.
  FFMPEG performs some speed optimizations under the hood that may lead to
  reading over the end of the chunk buffer wouldn't there have been padding
  applied.

- Resolve TODOs by unifying fVideoChunkBuffer and fChunkBuffer back into
  fChunkBuffer because audio path is responsible for freeing fChunkBuffer now.
  Resolved TODOs apply to the replacing fVideoChunkBuffer variable by
  fChunkBuffer, rename some methods by removing the "Video" part, collapse two
  methods into one (_LoadNextChunkIfNeededAndAssignStartTime()).
  No functional change intended.

- Enhance "logging stream to file" functionality to write to distinct logging
  files for audio and video. Before this commit one could only log video
  streams. But with unifying the _LoadNextChunkIfNeededAndAssignStartTime()
  audio streams gained the logging functionality for free. But now audio and
  video streams would be written in the same log file when watching a media
  file containing both audio and video. This is prevented by the distinct
  logging mentioned above.

- Update documentation accordingly.
FFMPEG Plugin: Fix correct decoding of first video frame.

- The first decoded video frame was always zero bytes large, due to passing the
  wrong linesize to the color conversion function. The field containing the
  right linesize (fHeader.u.raw_video.bytes_per_row) simply wasn't initialized
  yet. Fix it by updating fHeader first before applying deinterlacing and color
  converting to the decoded video frame.
  Tested with mpeg2_decoder_test where the first picture now isn't empty
  (black) anymore.
FFMPEG Plugin: Fix performance regression on video path.

- For best performance the color conversion function expects a memory location
  aligned to 32 bytes. Without that alignment the color conversion function
  falls back to a slower conversion path. This fix was measured via
  DO_PROFILING and tested with various 1080p video files.
FFMPEG Plugin: Small refactoring in audio path.

- Lazy initializing the fDecodedData variable fits best in
  _ResetRawDecodedAudio() as fRawDecodedAudio is all about managing properties
  of fDecodedData. So fDecodedData having some memory allocated is seen as a
  property here.

- Updated documentation accordingly

- No functional change intended.