Revised version of DXHookD3D9

- Revised version of DXHookD3D9
- Some refactoring (like extracting types in their own file)
- Added a Hookdata which 'manages' the hook. This makes the code a bit cleaner (instead of all those long method calls)

The D3D9 version does not use SharpDX ToStream() method to get the image byte data, that means that on the receiving side we also cannot use Bitmap.FromStream.
To fix this, I added Width/Height and Pitch to the screenshot class. On the client this is checked and when they are specified it uses LockBits to generate the bitmap.
This allows both the DX9 and other versions to work, (e.g. use SharpDX ToStream and don't specify width/height or use raw byte[] data and specify height/width)