Use IDirect3DResource9* instead of IUnknown on 360

Xbox360 shader types don't actually inherit from the IUnknown interface in the
type system. In fact, these types don't implement COM at all, and calling any
functions through this interface (such as Release) will segfault at runtime.
Windows so we've switched the implementations storage type to that. For Xbox360
we use IDirect3DResource9* as a standin for IUnknown*

Also updated the creation code in the dx9/dx11 renderers to avoid the
reinterpret cast and instead rely on the compiler's automatic type conversion
process to identify these issues at compile time.