Dart2js bytebuffer

This fixes two issues when running the git tests under dart2js:

- using JS interop to call FileReader.readAsArrayBuffer returns different types under Dartium and dart2js
- we were occasionally using the ByteBuffer type when we should have been using the Uint8List type. We were using 'dynamic' a lot in the code base, so the analyzer didn't catch the issue. And it worked at runtime in Dartium, because I think they're doing something very funky to actually implement the typed_data classes. They may have more methods actually implemented at runtime then the interface declares. But dart2js had the correct implementation, both declared and implemented

@gaurave