ASGARD-1091 Groovy in Java 7 fix PushException

Convert all custom Groovy exceptions to Java in order to work around
Java 6-7 problem.

Java 7 changed the number of arguments in the constructor of the
Exception class. For some reason, Groovy does a runtime check on the
number of arguments in all the constructors of a Groovy class's
ancestor classes to see if they matches the arguments in the
compile-time constructors. We build in Java 6 but we want to run in
Java 6 and Java 7, so the workaround for now is to code all exceptions
in Java.

See https://github.com/Netflix/asgard/issues/244
and http://blog.proxerd.pl/article/how-to-fix-incompatibleclasschangeerror-for-your-groovy-projects-running-on-jdk7
ASGARD-1091 Groovy in Java 7 fix CancelledException

Convert all custom Groovy exceptions to Java in order to work around
Java 6-7 problem.

Java 7 changed the number of arguments in the constructor of the
Exception class. For some reason, Groovy does a runtime check on the
number of arguments in all the constructors of a Groovy class's
ancestor classes to see if they matches the arguments in the
compile-time constructors. We build in Java 6 but we want to run in
Java 6 and Java 7, so the workaround for now is to code all exceptions
in Java.

See https://github.com/Netflix/asgard/issues/244
and http://blog.proxerd.pl/article/how-to-fix-incompatibleclasschangeerror-for-your-groovy-projects-running-on-jdk7
ASGARD-1091 Groovy in Java 7 fix ValidationException

Convert all custom Groovy exceptions to Java in order to work around
Java 6-7 problem.

Java 7 changed the number of arguments in the constructor of the
Exception class. For some reason, Groovy does a runtime check on the
number of arguments in all the constructors of a Groovy class's
ancestor classes to see if they matches the arguments in the
compile-time constructors. We build in Java 6 but we want to run in
Java 6 and Java 7, so the workaround for now is to code all exceptions
in Java.

See https://github.com/Netflix/asgard/issues/244
and http://blog.proxerd.pl/article/how-to-fix-incompatibleclasschangeerror-for-your-groovy-projects-running-on-jdk7
ASGARD-1091 Groovy in Java 7 fix ServiceUnavailableException

Convert all custom Groovy exceptions to Java in order to work around
Java 6-7 problem.

Java 7 changed the number of arguments in the constructor of the
Exception class. For some reason, Groovy does a runtime check on the
number of arguments in all the constructors of a Groovy class's
ancestor classes to see if they matches the arguments in the
compile-time constructors. We build in Java 6 but we want to run in
Java 6 and Java 7, so the workaround for now is to code all exceptions
in Java.

See https://github.com/Netflix/asgard/issues/244
and http://blog.proxerd.pl/article/how-to-fix-incompatibleclasschangeerror-for-your-groovy-projects-running-on-jdk7
move "ami" ahead of "cluster" in priority list
TTL validation, UOM and expiration time.
Reuse DateTimeFormatter instance since it is thread safe.
move validation into command
Merge pull request #247 from joesondow/ASGARD-1091-Convert-exceptions-to-Java

ASGARD-1091 Groovy in Java 7 convert exceptions to Java
Merge pull request #250 from claymccoy/fastPropertyFeedback

ASGARD-1073 - Minor changes from platform team feedback.
emergency change to Disable Instance Additions to ELB label
Merge pull request #251 from jgritman/disable-elb-message

emergency change to Disable Instance Additions to ELB label
Customize JSON marshalling for FastProperty
marshaling of Joda DateTime caused errors
Merge pull request #252 from claymccoy/fpJson

Customize JSON marshalling for FastProperty
Added ebs optimized to rest API for create ASD and next ASG
Had to upgrade AWS for this.
Merge pull request #254 from claymccoy/ebsOptimized

ASGARD-1096 Support optimized EBS
Keep AWS metrics in a data structure.
There is no good way to query for metric types. Querying for individual metrics is expensive and only shows the ones that we are actually using.
Only query for custom metrics.
ASG name should be optional.
The ASG name on FastProperties should be transient. It is really just the value of a possible dimension.
ASG name should not be required for an Alarm name. It turns out that it is an optional field.
Allow dimensions to be edited on a metric alarm.
Metric can no longer be changed on alarm edit (except through the rest API for existing scripts). This simplifies the editing of dimensions. Alarms can still be deleted and re-added if necessary.
extracted retrieve method from cache creation