libobs: Add planar YUV 4:2:0 reverse shader

This allows uploading of I420 textures and directly converting on the
GPU.  Cuts down upload bandwidth to 37.5% of original rate.
libobs:  Add button support to properties

This adds button support to properties, which will allow a properties
pane to let the user click a button to activate something with a
particular obs context.  When pressed, the button will execute the
callback given, with the context's private data as a parameter.
libobs:  Add planar 4:2:0 async texture support

This uses the reverse planar YUV 4:2:0 conversion shader to output a YUV
texture without having to convert it via CPU.  Again, this will reduce
video upload bandwidth usage to 37.5% of the original rate.  I suspect
this will be particularly useful for when an FFmpeg or libav input
plugin for playing videos is made.

NOTE: There's an issue with certain texture sizes right now I haven't
been able to identify, if the full size of texture data divided by the
base texture width is an uneven number, the V chroma plane seems like it
can potentially shift, though I only had this happen with 160x90
resolution C920.  Almost all resolutions tend to be even.  Needs further
testing with more devices that support planar YUV 4:2:0 output.
libobs: Init source info before calling 'create'

When a source's private data is being created by a module, it wasn't
able to call most source functions because most functions rely on the
obs_source_info part of the context to be set.  This fixes that issue.

It was strange that this wasn't already the case because the other
context types already did the same thing.
libobs/util/dstr.c:  Don't find/replace if empty
libobs/util/dstr.c:  Add missing dstr_from_wcs
libobs/util:  Fix string conversion functions

There was a fundamental flaw with the string type conversion functions
where the sizes were not being properly accounted for.  They were using
the 'len' value as a value for the output rather than only for the
input, which was bad because the output could have more or less
characters than the input.
UI:  Add support for buttons in properties view.
libobs/util:  Add DStr RAII helper class

..Could also add some super nifty stuff later on too.  However, I think
using std::string whenever possible is probably for the best.