runtime: Minor fixes

- Fix ExternalFormDatumWriter to not use std::defaultfloat. It's part of
  C++11 but libstdc++ 4.8 (on e.g. Ubuntu 14.04) doesn't support it.

- Change the ExternalFormDatumWriter test to make its test port as
  unowned. This prevents a crash during GC if GC debugging is enabled
compiler: IsPureExpression => ExprHasSideEffects

IsPureExpression correctly tested if an expression had side effects but
it only half heartedly checked if an expression depended on global
state. For example, it would correctly determine mutable variable
references were impure but it didn't take in to account that moving a
lambda could change what it captured.

Fortunately no callers cared about global state references. Change the
name to ExprHasSideEffects, reverse the return value meaning and
consider mutable variable references to be without side effects.
compiler: Detect side effectless apply

This adds reducer.reportproc.ProcHasSideEffects and
codegen.RuntimeFunctions.hasSideEffects. These conservatively determine
if the given report procedure or native function have side effects,
respectively. This is currenly done entirely based on the their name and
arity as the type information isn't fully known to the reducer. This
means any procedure with typed arguments must be considered to have side
effects as they may throw exceptions.

The motivation and end result of this is the port and parameter for
stdin, stdout and stderr are only created in programs that reference
them. This reduces GC overhead by avoiding up to 6 cell allocations
during early startup