Initial headers for new driver [WIP]

There is some of @hanumantmk's work on Document/Cursor headers in here as well. Want to have credit given where credit is due (having him put up pull request/commits with his work so that its under a squashed commit coming from him) while including enough context for this to make sense. Hopefully this is OK.

Things to keep in mind:
 - Obviously this is a work in progress. I need to keep reading about C++11 so we can get more idiomatic modern code in here as we go along but lets start the process.
 - Even the API is in flux, so don't get hung up on anything non C++ related (method names etc).
 - We've decided to use snake case for everything, methods, class names, enums, namespaces (a la STL)
 - We've decided to use hungarian notation for constants, etc.
 - We like clang-format (but we need to customize it a bit more maybe)

TODO:
  - Braced initializers