Cleanup existing C interface and expose it as public header - related to issue#26

*    Cleanup includes defining opaque types for context and kernel.
*   Also add return codes for each API.
*    Modify existing API and signature if necessary.
*    Deprecate C++ interface if not necessary.
*    Update the samples and the build scripts to use the modified C interface.