Fix SFINAE usage in IsNothrowSwappable

The expression in a noexcept specification is not subject to SFINAE
because it is not part of a function type or template parameter
declarations (C++11, 14.8.2/7).

The previous definition of IsNothrowSwappable results in an ill-formed
program if applied with a parameter type that is not swappable because
of the ill-typed expression "swap(...)".

This commit adds the new class template IsSwappable, so that the
noexcept specification is instantiated only when the parameter type is
swappable.
Redefine ConstIterator::operator-> w/o forward declaration

The upcoming coding style guidelines discourage forward declarations.
Fix return type of SourceBuffer::ConstIterator::operator->
Merge pull request #63 from magicant/fix/builderror

Fix build error on LLVM 3.4