Optimize F# code to avoid unnecessary array creation/copying

A significant portion of the execution time of the F# code was spent creating intermediate arrays (e.g., in the uses of ``Array.map`` and anywhere the array-slicing syntax is used). I've removed some of these and the code is now much faster -- it executes the benchmark on the same data in approximately 3-4 seconds on my laptop (Dual-core Core i5 Arrandale, 2.53Ghz, 8GB RAM; Windows 7 64-bit + .NET 4.5.1) when the program is compiled in Release mode.