Merge branch 'master' into timer-closure
- Implement option 4
Merge pull request #244 from thekid/timer-closure

Timer::measure(<callable>)
- Announce #244
- MFB: Release 5.8.12
- Announce #254, change xar create instruction
- Add ZipArchiveReader::close()
- Add ZipArchiveReader::close()
- Fix #258 - REST routing error
# Problem was response being used directly while an instance of
# io.streams.OutputStream was being expected in RestFormat::write()
- QA: Reformat
- Fix ClassLoader::registerPath() to also support XARs in XARs
# Part 1: is_file() checks for mode & 0100000, so return 0100644 in XAR stream wrapper
# Part 2: No longer call realpath() inside registerPath(), cannot resolve xar://...
# Part 3: Change ArchiveClassLoader::instanceFor() to not expand xar://
# See issue #259
- Refactor tests so that expected / actual mismatch becomes more transparent
- Register class loader so that test class path is available
# See issue #259
- Add addSourceLoader() method for easier testability
- Ensure we always have the test class path available
# See issue #259
- Do not rely on io.streams.InputStream::read(X) returning X bytes
# See issues #220 and #259
- Ignore ExifDataTest::exifSampleKodakDC210() for impl based on PHP
# Not reliable within XAR files, see issue #259
- Normalize URI according to http://en.wikipedia.org/wiki/File_URI_scheme
# See #259
- Use well-known path in tests for base accessors
# See #259
- Chang xar:// handler to accept "?" in urlencoded form
# See #259