Python x64 and SCons Windows build support.

Dear Boost.NumPy team,

we are using Boost.NumPy and the ndarray project in a big data context at our lab. So I made the effort and made both projects x64 Python compatible, as well as the ndarrays 64bit indexed (similar to eigen3). I was mainly working on Windows and had to test the projects, so at the same time I extended the SCons build system to work with Windows.

After all changes, both projects build without any internal warnings (the numpy interface deprecation warning left aside) and are working flawlessly. I'll send pull requests for both, starting with Boost.NumPy.

Here, there wasn't much to do concerning x64 compatibility. The only related change is in boost/numpy/ndarray.hpp: the shape and stride of x64 numpy arrays are larger than int, and this can be adressed in general by using size_t.

The rest of the changes concerns building on Windows with SCons. I integrated the SConsChecks project (https://github.com/ChrislS/SConsChecks) and greatly simplified the SConscript. Apart from that, extension finding was simplified over tests and library files.

Best,
Christoph
Yes, you're right! I did a little bit of research on the matter and found http://legacy.python.org/dev/peps/pep-0353/. Quoting from there: "A new type Py_ssize_t is introduced, which has the same size as the compiler's size_t type, but is signed. It will be a typedef for ssize_t where available." It is additionally noted that "All occurrences of index and length parameters and results are changed to use Py_ssize_t".

The reasoning behind this is that negative indexing to indicate counting from the end would otherwise require significant code overhead. As a sidenote: I had to make a similar decision for the ndarray project. I decided to use std::size_t for array shapes and strides, but std::ptrdiff_t for iterator strides (making backwards iteration possible). This seemed most reasonable for me, but is of course debatable as well.

I do not have any experience with changing a pull request. Should I update the line in my branch and resend the request?