Devoncarew fast sha

Add a fast SHA implementation and tests for such. Git status and git clone spent most of their time calculating SHAs. Dart's SHA implementation, when compiled to JavaScript, would use numbers larger then 32 bits, which would cause V8 to deoptimize the methods. This fast SHA implementation is 10x faster when compiled to JS.

One other thing we'll need to do to get the git implementation faster is to persist the workspace between sessions. This will persist the SCM metadata, so that we don't have to calculate it each time Spark starts up.

@dinhviethoa, @gaurave