replace OTData with std::vector (and associated changes)

This is the first of a few major groundwork changes to prepare for the Bitcoin compatible crypto code.

I don't care about line length, or format issues, or Warning-Errors about this review.  I want a review of the changes that may introduce security, or stability issues.

If this build doesn't work on your OS of choice please send me a pull request that fixes it.
This complies and tests on Mac (Clang), and Windows (MSVC).  I have fixed a few windows bug while at it.

I want to get on with coding much harder things than this.  So anyone who is unable to code the harder things should be nice to me, and help me out with the pedantic style, format, non-stability, non-security review fails.

Some review notes:
The ot_data_secure_t isn't used.  It is going to be used in the next pull request.
The custom std::allocator uses the same code as used in OTPassword.  This is not up for review, as I wish to make more changes to this part, however since it is security-sensitive code this should go into it's own pull request.

Up next is the replacement of OTPassword with ot_string_secure_t / ot_data_secure_t.  This again will have wide-reaching changes.

Cam.
It's the same condition as on line 220. Therefore, it can be combined.

    if (nullptr != Ptr && 0 < Count) {
        if (nullptr == ::SecureZeroMemory(Ptr, Count * Size))
            throw ::std::runtime_error("SecureZeroMemory");
        if (!::VirtualUnlock(Ptr, Count * Size))
            throw ::std::runtime_error("VirtualUnlock");
    }