Tidy CanTune() implementations.
Logging change:
"result = true" => "result = success"
Use CAPITAL_LETTERS style for constants in the custom device plugins.
1. More maintainable constant definitions.
2. Related improvements to pointer manipulation in the Anysee plugin.
3. Don't inherit buffers between custom device plugins when the buffer use/size differs (eg. Conexant, Prof).
Update TBS plugin to add CI support for multiple instances of a product (new deviceIndex parameter).
Tweak custom device plugin priorities and names to better support DVBSky tuners.
Remove Compro custom device name override, not required.
Add useful override for TvException constructor.
1. Revert changed-long-ago customisations in DsUtils.
Release.ComObject() => Marshal.ReleaseComObject().

2. Create wrapped release functions in DirectShowLib MediaPortal customisation and use them throughout TV Server.
Tidy up tuner classes.
Tidy up and align code in EncodersInUse and DevicesInUse.
Main objectives here were to:
1. Implement locking in DevicesInUse.
2. Fix bug in DevicesInUse related to comparison of moniker instances. Use IsEqual(), not == or Equals(). Technically monikers should also be Reduce()'d before comparison, however in practice I think that has no effect for us.
Remove ITVCard SupportsSubChannels(). The original intention of this function is unclear, but I'm sure that it is not required now.
1. Tidy up CreateNewSubChannel() so that all references to _mapSubChannels are in TvCardBase.
2. Replace ITVCard.GetFirstSubChannel() with CurrentTuningDetail.
3. Remove code in the service that was using TVLibrary classes and frequency to determine same/different transponder/multiplex.
Move preloading into the TV library. The library should be reponsible for loading and unloading the device as and when required by configuration and external requests.
Remove not-required LNB properties from ScanParameters.
Tidy up device state handling.
1. Remove references to BuildGraph() from the service projects.
2. Replace BuildGraph() with more generic Load() and PerformLoading().
3. Remove GraphRunning() and use variable to track state.
4. Centralise all calls that manipulate graph state to SetDeviceState() and all calls to SetDeviceState() to PerformDeviceAction().
Add comments for public members.
Use consistent string patterns for Release.ComObject(). Not a sentence structure, just a phrase.
Add release wrapper for AM media type.
Clean card/tuner/device inheritance structure by introducing DeviceDirectShow. The DVB-IP/IPTV and B2C2 (SS2) classes now don't need to depend on TvCardDvbBase (which is really a BDA base class). The HD-PVR/Colossus and analog classes can now reuse more code as support is DirectShow based.

As a side-effect of the above, EPG grabbing will no longer work with DVB-IP and B2C2 tuners. I don't think IPTV tuners matter as they likely don't have EPG data in the stream. B2C2 tuners... well, it matters... but lets clean up the EPG grabbing code and implement it in such a way that it can be shared without all the awful hacks!

Also removed add/remove of IPTV source filter on tune. georgius confirmed that this is not necessary with the new filter. At this point I don't really care if I break IPTV support or the Elecard source is not compatible - these sorts of hacks need to be removed.

I also took the opportunity to clean up repeated use of "if (hr != 0)" in the B2C2 class. There is loads more of this, but one step at a time.