Log custom functions

### LogData ###
 - I added `theMessage` parmeter, which is very much like `theErrorInfo` parameter to `Error` function. I've found it useful to have a generic message for every log entry, even if most of the data for the log entry exists as name/value pairs.
 - I moved session specific data from the LogData function to a new LogDataSession function. This idea came from a [comment by Malcolm Fitzgerald ](https://groups.google.com/d/msg/fmstandards/BtNmQR8Xz5M/NKCgnm-3ckEJ). It has ended up being very useful for viewing all log entries created during a specific session.
 - for performance reasons, I have manually encoded the name/value pairs. Even though relatively minor, I believe this speed improvement is useful when including verbose logging calls in your scripts.

### LogDataSession ###
 - this function should be called immediately before writing the log data
 - the first time it's called, it will return the specified session data and generate a session id, every other time it's called during that session, it will only return the session id.

### LogWriteEnabled ###
 - when including verbose logging calls in your scripts, you will typically only want the detailed log data written to your log while debugging. This function reduces the overhead of including verbose logging calls in scripts by providing an easy method of testing if a logging should be called. By not calling a logging script unless the log data should actually be saved, you prevent the overhead of generating/encoding the log data.