BLPAPI wrapper and miscellaneous improvements

These set of commits primarily refactored and improved the internal details of `blpapi-wrapper.js`.  The major takeaways are:

1. Properly handling all session termination in the event of asynchronous events
2. Improving the usage of TypeScript by adding precise type definitions
3. Reduce the usage of internal state that must be kept by re-using the already uniquely generated correlation ids
4. Extensive and proper usage of logging has been utilized

The other miscellaneous improvement has been improving the the `example/ex1.sh` script to echo a newline at the end to ensure the command prompt would be flushed left after execution.
I would like to hear @tmikov's feedback as well.  I have a couple of thoughts & considerations on this: First, we should keep in mind not only what should be going into files, but what also should be going together in modules.  TypeScript can do merge a module from multiple files, but this may be more confusing than having it co-located in the same file.  Secondly, I am a bit partial to keeping the definition of the interface close to where it is used; especially if it is used/required by a specific class - it seems reasonable to keep it with that class because the dependent code that uses the class will be nature need the interface as well (instead of importing it from somewhere else).  Third, util classes that are internal implementation details can stay within the module if it is small enough.  Open to more discussion this though.