Adding ARM compiler flag optimizations (2/2)

This patch takes into consideration stability while increasing performance.
I've tested this setup on three different ARM devices for several months now
without any noticable side effects.  Grouper, Tilapia and Mako.

These flags are enabled at optimization level -O3.  However with -O3 there's
many flags that are known to break things like bluetooth on grouper/tilapia.
The potential for breaking things on various devices with -O3 is high.  There
is also flags enabled at -O3 that increase code size, which in turn can increase
memory usage.  Documentation of this can be found on Linaro's website who have
also done extensive testing with this:

http://www.linaro.org/linaro-blog/2011/10/25/compiler-flags-used-to-speed-up-linaro-android-2011-10-and-future-optimizations/

I have not noticed much code size increase using these flags.

About the flags, cited from GNU documentaion:

http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

* -fgcse-after-reload
   When -fgcse-after-reload is enabled, a redundant load elimination pass is
   performed after reload. The purpose of this pass is to clean up redundant
   spilling.

* -fipa-cp-clone
   Perform function cloning to make interprocedural constant propagation
   stronger.  When enabled, interprocedural constant propagation performs
   function cloning when externally visible function can be called with
   constant arguments. Because this optimization can create multiple copies
   of functions, it may significantly increase code size
   (see --param ipcp-unit-growth=value).

* -fpredictive-commoning
   Perform predictive commoning optimization, i.e., reusing computations
   (especially memory loads and stores) performed in previous iterations of
   loops.

* -fsched-spec-load
   Allow speculative motion of some load instructions. This only makes sense
   when scheduling before register allocation, i.e. with -fschedule-insns or
   at -O2 or higher.

* -funswitch-loops (only adding for thumb)
   Move branches with loop invariant conditions out of the loop, with duplicates
   of the loop on both branches (modified according to result of the condition).

* -fvect-cost-model
   Enable cost model for vectorization.

* Patch set 1:  Initial import

* Patch set 2:  Make a configurable BoardConfig option
                To enable add TARGET_ARM_OPTIMIZATIONS := true to
                your BoardConfig.mk of your ARM device

* Patch set 3:  Rebase on top of latest CM build repo commits

Signed-off-by: Paul Beeler <sparksco@gmail.com>