Tweak reduction rules for private/abstract names

It is better if private names reduce during typechecking (since such
things arise in public functions which should reduce completely) and
only abstract names are prevented from reducing.

Fixes #348
Merge branch 'master' of github.com:idris-lang/Idris-dev
Add String offsets to VM

Now strTail just stores an offset into a string, meaning that it doesn't
need to reallocate or copy an entire string. Therefore traversing a
large string is now much quicker.

Note - this means the entire string gets GCed at once, so if there is a
large string but only a pointer to the end of it, the whole string still
needs to be stored. For traversal, this isn't really a problem, but we
may want to reallocate if the GC discovers there is only one reference
to an offset string.