Allow for alias omission in aggregate expressions

This fix should be backwards-compatible, but I'm not confident it's being applied at the appropriate level.

When using aggregate expressions in a `HAVING` claus, an alias was forced, causing a syntax error in Postgres. The following Arel:

```RUBY
posts    = Arel::Table.new(:posts)
comments = Arel::Table.new(:comments)

posts.
  join(comments).on(posts[:id].eq(comments[:post_id])).
  having(comments[:rating].average.gt(90)).
  project(Arel.star).
  to_sql
```

Produces:

```SQL
SELECT * FROM "posts" INNER JOIN "comments" ON "posts"."id" = "comments"."post_id" HAVING AVG("comments"."rating") AS avg_id > 90
```

Which leads to the following error: `ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  syntax error at or near "AS"` because Postgres (and maybe others?) disallows aliases in `HAVING` clauses.

This fix allows these aggregate functions to take an optional argument that can either override the `avg_id` default string or be nil to skip the alias altogether, while maintaining the default behavior.

Now we could do:

```RUBY
posts    = Arel::Table.new(:posts)
comments = Arel::Table.new(:comments)

posts.
  join(comments).on(posts[:id].eq(comments[:post_id])).
  having(comments[:rating].average(nil).gt(90)).
  project(Arel.star).
  to_sql
```

To yield:

```SQL
SELECT * FROM "posts" INNER JOIN "comments" ON "posts"."id" = "comments"."post_id" HAVING AVG("comments"."rating") > 90
```

And avoid syntax errors.