AE: Mark parameter of AEChannelInfo::ContainsChannels as const
AESinkALSA: Prefer opening too many channels to too few channels
AEChannelInfo: Add methods ReplaceChannel, BestMatch, AddMissingChannels
AESinkALSA: Add support for ALSA channel mapping API

Add support for the ALSA channel mapping API. This functionality
requires alsa-lib v1.0.27.

This allows
1) selection of a best-matching channel layout when multiple layouts are
   available, and
2) reporting the actual layout back to AE, instead of the ALSA default
   legacy layout which is sometimes incorrect.

In practice, this means:

1) Devices that do not use the standard ALSA layout will now have
   correct channel mapping without ALSA configuration tricks. Such
   devices include at least:
    - 1st gen NVIDIA ION
    - some 2.1 laptop speakers
    - many embedded audio devices

2) HDMI output is now possible at "proper" 2.1, 5.0 PCM layouts (and any
   of the more unusual ones, such as 4.1, 3f, 2f+1r) without resorting to
   adding empty channels as such layouts are handled currently. This
   means that the A/V receiver will now see the correct format, instead
   of the "virtual" 5.1/7.1.

3) HDMI output is now configured to use the exact layout given from AE,
   when possible, so that AE does not need to do any remapping if it
   does not want to (the audio hardware will perform that instead).

4) Layouts containing the more unusual channel positions such as
   AE_CH_TFL, AE_CH_TC, etc, are now supported by the ALSA sink.
   However, currently CActiveAE::ApplySettingsToFormat() always
   force-resolves the stream layout to a standard layout, preventing
   the playback of such channels for now.

2,3,4 above require this post-v1.0.27.2 alsa-lib fix in most cases:
http://git.alsa-project.org/?p=alsa-lib.git;a=commitdiff;h=042223c4ee9b17ba8a24bcfc4019f24b69b8310b

Some Linux kernels between 3.7 and 3.12 contain bugs in the HDA HDMI
driver causing incorrect multichannel mapping in some cases. The most
severe issues that affected common channel layouts were fixed in
November 2013 in versions 3.10.20, 3.11.9, 3.12.1, the rest in 3.12.15
and 3.13.

To avoid any regressions, blacklist channel mapping API on kernel
versions older than 3.12.15.
[pvr] setting: enable option 'Close channel OSD after switching channels' by default
added space before format macros for c++11 compat

without a space after " compilation with -std=c++11 fails, because it
assumes the macro to be a string suffix, which it does not know / which is
invalid, because it doesn't start with a underscore
explicit boost:: namespace for c++11 compat

c++11 introduced a std::shared_ptr. With using namespace std and boost the
declaration without explicit namespace is invalid
Fixed mapping for xbmc command "eject" for device "devinput" (KEY_EJECT
not defined in linux/usr/include/input.h but KEY_EJECTCD and KEY_EJECTCLOSECD).
shared_ptr comparisions to nullptr for c++11

c++11 supports explicit operator bool, which is used by newer boost if
c++11 is enabled, breaking the implicit conversions. A comparision to NULL
is used instead
[appmessenger] make ThreadMessage's parameters signed integers
Merge pull request #4973 from xhaggi/pvr-setting-closechannelosdonswitch

[pvr] setting: enable option 'Close channel OSD after switching channels' by default
[uriutils] adds URIUtils::IsProtocol() and use this in URIUtils::IsFoo() for testing URL protocol equivalence
[url] adds CURL::IsProtocol() and CURL::IsProtocolEqual() static and use these for testing protocol type.
[url] adds CURL::IsFileType() for case-insensitive extension comparison
[uriutils] have HasParentInHostName, HasEncoded(Host|File)name take a CURL
[url] drop unused CURL::TranslateProtocol()
[url] drop unused ancient protocol mem#://
[uriutils] adds URIUtils::PathStarts() for comparing the start of a path (more than just protocol) and URIUtils::PathEquals() for comparing the whole thing.
[url] adds IsURL/IsPath wrappers for CFileItem
Merge pull request #4024 from lorem-ipsum/c++11

Minor changes to enable c++11 compilation