Add asynchronous value read/write capability on server side

Asynchronous value reading/writing is required for our potential use of the node-opcua library, so this pull request is to add that functionality.  Variables can now optionally have a getAsync and setAsync function in order to asynchronously process requests.

However, this change required changes to a significant number of files, as the current architecture relied on "returns" and "getters/setters" which are all synchronous by nature.  This change affects the api for several calls, especially on the server side.  For example, server.write, server.writeSingleNode, server.readSingleNode, etc...all now require a callback instead of a synchronous return value.

All existing tests were updated to pass using the new API, and several new tests were added to test the functionality.